From 0e5acd7eb9e93523c1a0bf90c20009af4fc13bc2 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 10 Jul 2015 14:18:31 -0700 Subject: [PATCH 001/337] Initial commit --- .gitignore | 27 +++++++++++++++++++++++++++ LICENSE | 22 ++++++++++++++++++++++ README.md | 2 ++ 3 files changed, 51 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..123ae94 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git +node_modules diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..59a33ba --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 David Dias + +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/README.md b/README.md new file mode 100644 index 0000000..d5fff31 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# abstract-stream-muxer +A test suite and interface you can use to implement a stream muxer. From 4fd2bf1505003f366f5ca9f39dbd0f17416e138e Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 10 Jul 2015 14:41:19 -0700 Subject: [PATCH 002/337] Initial Commit --- README.md | 33 +++++++++++++++++++++++++++++++-- img/badge.png | Bin 0 -> 7694 bytes img/badge.sketch | Bin 0 -> 49152 bytes img/badge.svg | 18 ++++++++++++++++++ 4 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 img/badge.png create mode 100644 img/badge.sketch create mode 100644 img/badge.svg diff --git a/README.md b/README.md index d5fff31..db71478 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,31 @@ -# abstract-stream-muxer -A test suite and interface you can use to implement a stream muxer. +abstract-stream-muxer +===================== + +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) + +> A test suite and interface you can use to implement a stream muxer. + +# Modules that implement the interface + +- + +Send a PR to add a new one if you happen to find or write one. + +# Badge + +![](/img/badge.png) + +# How to use + + +# API + +A valid (read: that follows this abstraction) stream muxer, must implement the following API. + +### `Node.js` muxer.attach(transport, function (err, conn)) || `Go` conn, err := muxer.attach(transport) + + +### `Node.js` conn.dialStream(function (err, stream)) || `Go` stream, err := conn.dialStream() + + +### `Node.js` conn.on('stream', function (stream)) || `Go` stream := conn.listen() diff --git a/img/badge.png b/img/badge.png new file mode 100644 index 0000000000000000000000000000000000000000..738bcf4a2f5d9383b844ebc9d0f2ce6d2aa1f642 GIT binary patch literal 7694 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 IM6N<$f@W_bMF0Q* literal 0 HcmV?d00001 diff --git a/img/badge.sketch b/img/badge.sketch new file mode 100644 index 0000000000000000000000000000000000000000..990ad1c5bf41d62134cb37a14df7086e62098dac GIT binary patch literal 49152 zcmeFZ1yCH_+V9&VxMXm5cZWeja0~7hd~mm5A%hPRAV7cw2n2@^2(BTxO9H{21WB+E z2oWHh$(z03^X+}UeWlK=y7yMmMNh9@@~rjzrn{%tXB9C;~77 zAP^wO$Or%c4tm8zum4=Y=mhkiJLoOwzoh?D5(nVh#vnkKf*CvjhDP+q^>R(%n!q)I zYXa8>n=;%OBf7$Usn{%-BM_2r_1^;LSaeAM z!xIJ#`T=?$dS<$5^zQX?P2ifqHGyja*95K!Tobq^a82Nvz%_wu0@nnt30xDnCU8yQ zn!q)IYXa88XVURT$^P)A=mRtpnt1{R3$^>gv^ z{Eud|13c^yzCd&|mbQWM@6a+jiMIYfEpkUkgM6|iVzn@!6cMC$0WR(i|GUN_@C0HF zpiq(sR$FiH|7h$#I7n^p<-u>~<&5w^o3IoQI*M8zdU5F)n1c5o44dwUU4TOoua!oktr-a#n#cl;kj)&rpbu9s^9*95K! zTobq^a82Nvz%_wu0@nnt30xDnCU8yQn!q)IYXa8+lZ4X-) zPdjgS7e9YN!FTA{S-}7VJzpyZfC-g`%9yhLBOqYP>h)L9z|V};*4N(I1)Xik>hI-E z41i(_YG9K97Jv=V0Biskzyk;a;(#O|4afpYfHH6!&;)b=L%Kr|2wBm)nD3?LII0E&PzU>?{2J^;)1};Hh5Cnt|A_9?u7(pT+I7k|F z6C?*x0%?J?K{_B^kTK{E$O_~P@&I{)0zt{3bWkQJ8Hy{)cN(dE%4#EWChVVcHAtDe_hz#T=L=K_=QG@703?L>Ddx$f{9pVk~f!u|J zLheJ5kXT3@Bn46osen{Lsv)(IdPqB@1M&*e4e5i7L8c+IkY&goN9m$_o`UV)YDgcV9ry&5H}*0r&s`KnUCbU;q(7 z43Ge%02x3IPym$ZmDYd8g}EaHil>=;-7YZSJnJ&>%UaB z{9`=W!_Ldy4+(|=NOB}IasmfQkAtM10cZg_fF58#51bKT0+<07fYr>&*Ve%WJwQKW zdoOn{U-U3;xOkw4rRe4Ejt+03`#1h;-w%m}gdlN{BuKI;fE{gu1K>2Z{T}^FMC=7Ezl1Nh18Lv<_8k|Kj zP5RwsM4k5zLYs!Rmv91`j>kz>wQDE6UTa0jFj{g5esR3*__&e%EzQ1Ub({=?Ud*Ah zcWhVrv1%xlu0EsD4b^!?@)R~+dMz_i;$~+~$J_hfp;4Ew*myAoDa>bfFkUyJd3q5k z;IBnFDGNlHCW2MQ3h9wR zXCS_>icx|tH&pEYDMaG?_6XbqjOuWdiJ>z;G((lYl1|&)FH01M2CUNz}@w}|C6!m`?&QCUCv09y~IQer$t^_+dgl>$L7k*sXK1Jg6UH+*`C-W z2~C(rR;OkY!-U{0%z8IU3ZAnG1vdjDYQxP^Eoz2hUsYpnJVF7-8~8&E#Q3(~CjD%J zJ}VN)Rg&(Q@qovkhfiOuD9xQ9<=i5C#OMM@Crt63ifQb)abeU>-wTOVQ}PIp;0WnL z54UPZ$u}^k3@Tdkjwg@or@akU^mk$L9G5eP$2uLLq(jQ4x|quta(cJMpQHj_?xa`C zt09A9o}ERuTF*qLHu04VlIY0R;fgl<%QSc35fzV~N4v|I#Jn`?BMG%j1HI2?Q@C9P zc}5BzhH-}231BIY`>0{_zda#dx)G5$+_DUi^Xe{7eW zk_##Sgt!0l!S3{M4tEQo>UXk9*DVxcBTbXltI?E7FzvJ4tx)#ZoQfAIn?W@L=ANv}0^h&g(OuljO-d`{a(THErbgN<;V>TX|sK@va{t zlva>GPGs>d86J(4BD03g&=cQi3gA=qgCf@Zs9S}$RF`_(vwS;`02VKMK4lBi=Zi9) znboPYpLt!1n%+7t2+JjWp?b)^b&y&N^yS$SFU>n9Hq?ALx0&Y2H&|ltYB`n0Utf>? zf&Y`%Ni;x(1iz(s?OvRMtQ<-N*VOb!*h=XOXGK0q8kb?P%7B$K+YtXe>$@;U+Y3;0 z#=g9)N0T=}GUw+hOP+$RG_f$Dl+&EceXA4cV^i^_9nv`Lq}!bs*l!RKT}VY*CjeV9 z7Af*Xs;HZ;FnxfA_y>Yjs}|}MjVu0ye;$tH1tq*%Jz+|l15QdakYIk#FPMPz;jzItBaJyCTaVSplPD-B=Hw$d zpCL&z+^o7KE`4TN?^YA2Cc^Q%DYTv4lSZx0QmStTFTzo=xvTC5t$ql$xxh#F^ibF<5`1zRnJSl>wpma5DDXzL ze%R+56T+j~k5|yY4Zr8}$MB=b{rWo0&n67AsTjwvbT>hpyA3;)-AS$Jr{xk(k~6a) zwOyrQm6`ZMRn09A<~+7)raZl95zdSUgLJgEJOv~7C#>pC1Gori1jW@_1~H*UETC%X1)PrMnQ zq5wH53Az{%2o{3vBfEyNnJdOdg-Nyp_y*d@IOlB%1eb3Y?<1P{EHyDk&as9(ZY0m| zc!iI7-gBlUi)l{Z)y$4$11Fm;x-!5+ALIo=>(Xlq;kgUKigC`#0v+))7G>{)NsY&!0f43+*R%MfT4a~L-sP=-? zNg6dpD+{`AgCQ`LCBMw>C+1}N?B#~uHqbWamnEB~1}^@w13R^!gyB)ilF{YdUCDLD zAD+Fdh4vhTH9M0fVH~@0azucz+KwE=mc1LF_gbmLW%OS9$p*yT+s{cc2pp4%Z9w4G zR3vW1owXR3Af`$6wu2_vzAes$&)3h@5pMOzVUEfA(na?x<;7)dfFq?`(nX3p`suWU zwv@(szH9N^4@B!`?QVha2N)kIM`Tk& zf6xjTn!fE1o(blXDcLJ7cfa2k#+)$4kjx|6Ld035=sm-TJVHFzZ}+R|n5=HS_a?1= zdK;po#@RlEub+Om|8dHf+I{J=ab&O@Zur`Fy$0p2hL?g=C1sk5$l* z!J1o|=A)>9F*lLPT3X`>^9^%3FW(tlsR$+0cx)|Evf9jv;#c1)Ro#V6YW>z4a6K_z zDmL7l_d1Jk^I0R3Nt0HZ&Df+Q))V${d!WtgXWYK0`|btT$Zh2=xmzD}SM3kXc$iC* zQF!>d(P|(`>>SUBP@9HB!T~sL7|cSdH<5K}#uF=+x+d!*Ab3&cOhG~B++i_pJtcDgby{wc z;@0)HL3e}uv;03^t6GFU5hna{W|QxA^r}>22X9HC&!0IyUB~9L>*FRZ*r(jv@zRGd zpLJX_gD(!Wr#SdLY6bE`Bk4M!YlkCj#|k zqR@+dyvY-ibg+GOu=cn)ET$;cbFKB>X=NOr;@u}Rj|=tmZZlV>d8>g}o*^}pD3qxD zlmaH`ZEv)*yeT&+f3(c7u`prAca}pJ9C{hkymU8w<@E`jNU-l!a^= zUMfQ-^RiW1rjEXh_k`wLhi_V)H&xa-Kl65%@K&eBCnpg!>zHxfM8plM5E%#?MOJfQ z@XMLE%sQ?qI~8<|-UcAkP5BhbkZ9Iem7Kx|(iTE`)mLi$>#{y=h1e#V%!LC3y;vWfkJH`Vg6%u~Wyh4y9vjBK3S&QjnUc zjiHUgRR&(Dq@cPGboGkja^QVytJ>9x6>*Q9`~W!lB>laDA3q_o)oaO5fBqC*HGvmF z5;<@-3T18HM%MvN0!O4pOr0U`MNq3@LFJCmuEDXQX&&s@O! zP};YTwh+h&Fa@POIN}U0_ztS{aPJXVLBLpNec1Of;)+LFHiE7Ra$ z#?qfK0~Uf{PCsKijn#zh+q=2d9B^Id^0dg3zCoeT<}({0Df_DWTlU<_cvh%qvf^Qg z|5Tu+(SG?%o-sxed_}`FvFpOg3n=ot%h$rs2u=1!eKP3!Kyd6%o#jfesvDmWlntNa z(@V3xe>#-0a(AQVphLuD!TOaWhK7moVOLXVDDGMH6=j{fEIy@!G}|7GP7ZxbpmEc% z60X?ZmkBpbQ+n(kqcJ>EffNz;R%sBkcUw=gCzIPGU#U_h4fCkyIy(X|JGnk4>5&F8 z0QgZa4>RXxU#ST=AAaiQmKWG55Q;_L3eQjV))#HRrorf}$`QzKk(BHFx@VgcHKtQm zXuN%s`6Ut?h>$)dyf+(=XP}*z_2q3IUWTx*z9rL2VOxWoJC=UD`P(RF|4BmZET+q& zdnR5D`ODJoJFkCuOMi8?1E069w2OJ&KYt`UN~$2L~-Hd@1)&j>!N=V;a4rx9WkG|rZYoS5&% z!wP=robs4~aT4nzu2Z!K>x_KoTOX^&6kClu^?X!|417 z8{hoCp3^|uHW`X*kN_me+zI%q{=ydZK>_;dB7L~vt~cC;P$hLhF8idzlsu35%7nPf z4waSf@wBO3)-UVw_%``sj&;+#RYypZ2<*&Ct3I^p!@gJNvVD5LHxMgVP{i(2ejqea z5H{yh5xL8}IV^8lMfTzyF6BWmPXof6rkg6Bs1CcV;#CmK8!DWMC6C-oi}r{J)Bz;v z7v?8E;kh6c@p`1UafYlx(wO{HH(l|vwzjG`+N_o3K|Fn$AhK=e?j2+4BSW97fig?NO}YkJw#m9B(Lu znS&m!-Z5DqB;ZGBhv`)qSD6Z!w`xUo@)kJMGL{K>#C-!4jg4?8cD-$up_Bx9LQ_Cd z76mt9GR?}y&MG&I@d;ds&VWpBX{$M3A^3KL*TO*Xz{Sa`*XmTs^2;N>FVp8`RV2-- z#8-x>$ULK%q)NrFZL-prwYQ@sx2nHM0LQyb_eegN6x>RKEvjZnzGdRylx1L!zdZ$I zO+YmY%Zd^4y&R%EvSFU{W>}7hzepTUd6-$>Pi}9@o4*!mAn1A5b7Wo@(@yAi=_|g7 zW{}`+0iXIiejDjm@$h#+71d7{=ViJCHo8X7G5QSOKIj;QX6p9|&-P&*WW%=0(j^OP zZU9Vs4d|=h08(UxhsXd~3(2dco3QzX<(sVvm-^)Qrs6rE`V{~%$58@mGG;nAGL0rK zPHweW+mvSv@!il~QXd@a@qJ&iiT`Ux!3d?E(tEwffYcyQDR8&ktj^nzc>bM@6BEh;|h^pBn=h{(WMy6Gq1OO2#OBxh?7E*|qi6PIbg z6T0T|aqpAdKt%~Icux4XTJa(wyTy{L&#F-DPVnk=qhygjVoPsN|4&C<*zn##3)`cs zm%)iy-jlz)?C_lE;^jI?3-`v6g_v8Dyj>h09Fdk5_s3s@Q>3-gc!Yg|1AvB%GV1h_o`8*Csp1ljQ&v zeA+uu?N_7|JUW7@)DXPnYsNi_x0iF z69Mc^Z3GAA!7ieLB$VDP59W%Jg}&3EIEEb?ZzqH)p?~I4~f2wr_6i)lb%#XVVcQBB?`f|=((0%tIiu?+@jc~Y!}bnHo;=^?i@l3 zEfBvqYArh=UlE!nld~=|wmJ3l&T$xrPDG0wGzExUhTDQ^#AZOr#~?L(S`L4QgMx3a z0g)OlBmHEJuw1=CNz;+}hj%UmH65&(}}y#i?*ckdM$?J=tHb-ypKGVv3*x|7HDv_ZY17bzV<>aswwk-tPZg|J6@13D1sU;~i?{{Ds<>JT&9RbjqiS6T zW~+Cb(=$c8))7LV)-;|^%?RCoU}--L&cpJ#+QPY)Z^@RUqK*`_}}Bg95+CBIX% zv2j_XTS_>K8b^e@0B3FThRHI+F%tZq6qaG~V3TlJo7o54{Q&-^afV0Q_C&@*rNqZ4p6Bc462*}J&Q_|fv4Mm}6`4vw382RF~}9wuo3 z@t{zcad5JQUJn_(NSCiSLRoH{<&)2|Ub?;HkBufz1v^d_;FHap?_7Db%|CVTRXsSL z_W9y@;@{^3r3~q%(Rz{vrtOdDTlFqkih7CzBk*Rm=FnZ$60~cfyY(}^j3CxK$)Bly z;+}o;<;SfX=1=5xoH)A4H=o)%G+gLt9KV%)`0d~@eC(~ywjwN=$d*c9FhhTG2g=-< z45esIY3oxj;DKUOd{<$79;NLu7Pa&MV5$fZR3&Fv|Q@g76C1)XQAVCHFGJb!vDb5#vk^ ztm=uD;fZ{~-)h(R6jNDsAz1gVWS!QDv2;KX)^s3;vq|?FCP*%ObK=eOhGzt06SDW> z?|nN9Z$F%U5!k19;?dnT-CT``_>=QkS6eO>sthsniNZj_PnmDE1_`)PJecvuvhD@I}?ANv#*rJ2&S;1L~G zkliwWk&2y0?z&aQ>`PF&U>cdzdocQ!(L?&|ocHAFIDgFI<(n08lKZrbpBk@1e&Hk) z9yR2IcaDosu=mUnmT~r##s>`947LsVj!x@-s4Ts7y(|1+ht0figZNfq3}ynj+wIid zCqd;hZ10fBq*aGmios#H)#3;5^x}fp=?M4EgndD6(*8XOnEkJ2?6~@u#(ZWmq&W)w zPBrkxxrv~Up1Jamab%!xah6vk!h1K3;6?TkF~gjvUmPYhb>r3HEZVXe29ZV}irw`0$Kr?jA&_oi|iSKmt;(+ieloj~}juE+X| zg;Zf})9Q(R(msPj#ii%)JoysNDEfi+g_+x|r333pKJX~c{BbLrUmWPCRTx@R~zOex%VVbf~D>Kpq0>|n;!fRVR0 zDxn@4UN--xB{=^ovk_vt)DhfLxX5el#C&U+NZGQV7|cTGG;IsTEZG0#ZK&YhG5v&? z@?Nog8u8EJ+l083sdhSqZ(~*@KqpbsKM%NDw&T8~m~q|KAu1EJ3tVt=RjQYelsjF} z^P_n5gA)0sg}-ZgB4AN~k(P54g~`Z-gmJ{P$V7A>GF6A|hqLLD#>en1d5znWoVAHy z?Y|V`^v5*_vp#+ZA5bs80S^DNH2X9{WT?(leZBTeT8j$6Jy{&yg-XlZEERZ809NGP z!^cVXj!lVMG_g^aD!Pj`Y_+m|@2Bv|_T*ZgrbtMq3E{#L4gK1~T8l&ahNG1QuWz2? zrdM!KXe;(RAVB?bylb`rt1BfbnObt47R-CaoF_Lx(bK@8;GE0V$E*$p!TG?Xs+QK)H z*!EPa2z{F_s&@h-e#z3T$v`e2C7!^oOsO;wNd!7tDS4e-R*606-9=_ z$4w7d`Ile0^fVD{xu3x56Y9uv9PY|F52T7?;d8<#p4GNP3Xi_Ff?_Ao_gktP*dG(T ziyd6-DDlW2EKbc_Ho0rPe!>2toJA-u;#rs_sg{!s7ZEcmX;-Y|j84LA&wFC=vH4P( zwn)_*r7`SI?pb|H|)F|WWwR=mB{!2$Q&k^qOd6&n$+wzMTFJX=iG zqu1QqA6UuC4`@tm^X4`MCkl&)+D=RzAW)P|l5agRgB)}de=wGUjr4~S(v@H)U+;#m z>EBwhqg&ZcIuq>_?&^|CsykC-#-K!TQBepXC@?ya%j8)wM>*bH|{_4(iJY&l%D!2T+x>-V$ z`bbCySwN3c@dsg-8v^y2pJ^vR=G6qi7e;r~DMLzm@zv!Z--waWEBZyuHzh}p|tB0Gr*<>(-k_b>DU2tJQ z*dZSI)A}oQN}a~b_FLb^zzSHGzgXrLU$1@B5&!sYKKI8RZ;VWsixRHd52)Ve+lFzh zq@d_A&J<+}YT-2!lhl%3$-SZao=JwfrqDoByF>R3F<@9DjoywpDP>6ig8~1&h|N)F z7&o}j2a}2mcsNby)R%1Lz8LUp#rtiah-^YCf16A zlRIHI6Z+X7GV|}EChH|@l}(Faq8jNAW|`T$0{6DLvSTo6LS2ytks@{W>Edh?@Iyn3ppTEpA3rGiN;OX?$@q9P zW2IrkEpR-F!a`_vFe6Tx(*o0la|sn9-E)&#eW{~Q-!0J}4xUX1jvGgY)k#`Xk{4?CC*w+z48)mcu+pr(6}n(fireEl$+sayveam75@qzrLIKE*iw}dduvS6 zOR`3*K*YO9hk($+;ee;=d`iHqp&tEa$v~4Lc*xMUr~1{E#`$)UwH^Hj~$EusC0Kk}Xna7>b~#dQvz9%E;(XNxi-GdtI?2*Jrc#*cbd$zUkQ${l_>FR{P3 zC(!gFM*2mbLxkXCXR@xnm>}H;H8{Fn{GL1puC&v ztL=$~5YG-zW=B4&%jU?`x8zgg`Y<{uHIk`lq+6KAqDzO=pKz>FU=I;XZ(Qto)O0$X zf8QACqYGLPt?RDtcyG^nK*JX~Bl+Bo{6vEEl-R_EPd?Y*pWpKBgNg)c+Qs379$7Fc z_7DL-9wwt@b3`Xo#&@_K_xl^0qY3L1mF6#+9fqHBQHYY%d@El!>aTbJP7ps4gN~ibf}_`j8UC#@EQ*k%Gq(2*hf?B- zevB7D#O%}Dd}sJ3SLlIy&`>p`ZoqRd8KGSkx!_sBd% zqh7NK=f6GUzJ1%Jenxk36Q>~xqEM&OXD}J~#LSq2mdtT7R>gg64N5t$gVdW4=_ zC9$V+TZ&Fp{AnFiSa0dCv$(>QtYQYn9O3CE+@Z^3L@9C8T2fNYrcXXOZ~+NFW@x_O zeqJAVVxMKfuitebkB?_!EZ9nn3n+;$W2#ownbl%w%gpTdr!Ej#!3u=Hc5>}qePkv8 zz8p$gV?&+hSR8}iR3E{Es_0P~XOAuO1`q7Bsb0k>-|voOcgP8nRRQ&7eoqhB!p*SD z!v0X-A}y3iZck^(|MA*J#Ta)WqniTLxEu97xP#G`jq6&Va%);dgH<#20X7e61tp zNAmf1EIQ7e#Ed=NnD1eBo@$5SLpBlP zm$ea0(tb1T2S#z1&$MKHUq8ZX?!`Y1`^ci8) zBo^OHhWj$I!ppxMHV;u}FWOqSoiLyOniZ(u#$o5lWcFlEgGR1a9Y;pSoNNv*?9VIo zk-U2IRX;#0&nkPM3_G|56nrmy(QV$$TQ zpZwJ}0r_kX=j7+JV&o8a>#vBK`CDuEA_#ssB#egW$ENm?=p?eR7CMPM&8D!H7er-f zP?K?byk)mh$d0-JW?RR(TUrzS`^7O#Ri8N8*e_okznjJRgeEC?W7h?l5+zp3MXsvd zs()&3<#zwoA(%EXv)M`<0@ZMkm89>W7^6TXf_+_kMWE)a5r?6JDZFbffQW&11J}6g#D*6o+P=69f8FTupT% z=CQE_;`zS5&~kob->>2h)?MS4)c(=4nN*rm345wwSewT2QMOV49XG2e>36NYLCL>l8_eMjz|y#_nmm`_zOdDn6!)M%cm zl;q{szsDXYLO#jYbR+i+BPZ|I!7g2iUec0b2ev?7M7Vxr6Nw9PqIRo?cO21#}N?4_<68$!!$h-1j=LH!7X$ZZHVuW52aME zC#TS`3}KNrZn(%^2p+t@oNUqHdDO7!<0G%z(gI0^HEL`2Fwxs_qoQ`nBNXgE&~>pU zl`c`XC7IPV_J-74ne4$2gDis2Bt!2{GPO_-rLI_=_P5JAej}q7OuI1kc^tx0SWr*1 zuKo^sbGdPWvS>lKbuJ|F+ah#O;X!MdX9MjU_5$oejW7j?S-myq#oSSpNpR9YulKOO zGwSgM4dum#7c)auE`t4?(y$5^_n9h>tg{pSr8J7w6FES-1jO8Ek7DWPcW4>*spaM4 zec44>{%mM^jMbUxqrAbn-PsTuL-W}7IO+E>_fSAMji!O&%-Y36iN6=c9V}sKYC)GE zJ>waVH77fh<)_Y`cH6z+U2k~VmXHCDr-vU1wp@e-&U=PMEsbcS#2O^_15_`UEPwKf z;C)`V(|g!0EM(d=b8N6bsUu^}b`X#_{&>(8AH`~v95Ph(Xx?|klAXV*$nWv8)ZG`l z_gdKFimH{DhNkU&gfK=f;^_i++OI~wKrTb?t#x;{U@=~{9*niHB=ZRdnyl*Hi7rzI zaaKNBEQ>lX!mDDG7c9TwIcx-qNje3vJ)LE1YU6;1`IZT^f*)$A&%_0JV9dius^&)F z36H@=f{va|cRtq%$m+#o)%e{{AM<`Np)%ZU#{C4p8Tmc8tqq5i$f}^lPZpAG$w^3R zst#WWk%A!vA$SIumapDqC3^yDpk~8 z+H`2F_10|dff2o3T{!s!h?L0u3W`hcP4rv@EWdoX#EO0(vC$n<;CVdE>sDGIBFy4= z6#jOrsckQNW%YBP0Y?ZehpwzL)_WpQ7yluQ+q29u+3!g{`n74cp}AAfa$Admi!-i~KgC~lYS7CfSEEpUcn ze>J6J^3kzFKz7AZK7eA8GHG1T+7IL~hT<};XtxJ?=Hg**v8Td^Rui_wQu1Q3;dj%0 zT3UPTzRI^|0GxGI7iu$@`+-@5106J{m?tOd4f%aP+IanwE)Nm~x`>P3a4hu&2z$*a za$3PT8Q|qrD0<`+lw&=uH2JLvwcMxhL**)E)JmVUlxaDmLY-BP$JM03;(L?J!Sors zfzGw*{Sx_i!;K|e)qSAqdLMtfJE{?H07Xlp7;il+Fx58Gfrcl0dh~HZ8d<3;?|tq< zt^fmRT6jco&hZFq%Wx$areu`N>eurj@X#f{G5OuEk`1NQA0H`by%xq>%s%`;HfjHo zG$u85O?lJv_#^gYg?Hd%4%dV+f2sJB7#{&%at~XTI;90xvduViamyh7_tmK{g7)%{ z*SlBF00;Gum~n)RV5~2@$aFlPPrF-j2z?o~sarucCs+Iqtc^@=Dp`7yX@D8|EdMed zj1r!Bv|bwYoz!-YH64*rtc!~vGD>OneGJ4-boi(^PIT|!^+@aXaZ%q#6}@Ah<2=-DUv}<1e)V+I4*y|^z|FeOp706!U!SG( zm|kA!Tv^^=Xh0uji<<{kKkpY3kRLh75WTZz94%uE2qn@%n6}P&$mJ|y!_lzQCLK8T&z>d3yO<=11G zgBQzf4NFa6Y=Y@5Vu4LeR)SI4m(#J?H%wk~ zDv#Me;2WePfC0+P+$!a>@jM|er1gA6T8kZO5+^(iTM{_~%gi{;w6{$qm9=w6KcOmL z-@5dhZOt!qy=&J%cg0Ne{GOPgppq%3NI31LI3IDUuMIZv%kAAEk_c91_rTkgbTGgt z2EyLLF_sYnH=s5*W$$=0X>r6cG00`s(C>90t4$EN`>jo8<>V%yXDe{$)ZA_1yR7}2 z2fWI>$J&;rgs>QmA|p-3d?N)~PB8Qss=CWrjoRZ-1+gvyERp@hh5u$ssYz|K@Sg^*I(BBwG!m_~*#4wbo@b9p#n_qC-?wn;VNlxzSI<56 z+pQA82N+t-vK|kJqSW_8UxnXCvKF#!HCo(mSTf(# zykYNYCH1y@b>g&6JTQcSe}gnsIF{aau7-6GyJ|GiBIYL<-=n@t89H0ANygxpor%g3 zmeR0QzhA>yc1Ab9!d%0CDJ1fL474?KNNH!suBd?X^UY32XFV5b15uig06Ezfh@<|VgU9U?_ zZX}dp`+)up0+(8r__?^!3~Aw~{oaY@^md(4bFBo%_tS&x#y+caP@8Sli zp72WDw5x4p4HPlat%aq8;AX(2_)WL4-$Jo%Q4F>K6+#{yLDVadwJvigE291IS2yn4 zAhx;oM=tm+WRBiTJdD(-uf8c~QQpe4y$Ol>aC5wlw2dX6Stmw1J9-ol9N=d(-C@yw z$*OJo?gb)dyXK|2fBe=%jc2(KC7Ta!)4ZBp#FP&}1z|>s7s_W8Zj<>Bw^`?Cw{p|d zv~8*Ub}^cRNR-a%duM&;&2I-VB+sxi8qV3YmI*$a6tvu|+pbWLK344_GeVY|fo8TNT()L@jA~POa8@H$T0 zSeN)-gUMr^I*hzUzD#ni<08u`=z^Zxtxu%48JaMANHXlkh?$0;wYs@B^tmM+i4OHY z+L=AlD7Z>Tk__@Dmg{zv0~%EKdKWLNDteqc=UN=un>jeYuHao2QCyU)%%0n~e>~1H zqu67zX#b4hgj1K?ch-3^Ra64FJq;n0PEO^n8aJPvz_8vnG5YZJg&?Vbe8I*m^NWEUy|7c6cYtF_mM4l5L$lwuQG-p?r)*Mr=KVV0h z(`l?2=bfS8^h2`GqCcLeb>aJ053J+?OHVeL1a5m_w>iU0uzaCrgi%bgsZ#~j)5q;P zat>VgPD`xo;=DRW!+(B;y!7pv<@`y5WhU)yKO{n+V`RhY$R{0kqBYMz_)c53?R`C9^ zRdXLB8|P=Zg~QqV#0DTv0~r&|vAT4Dw)qm+fyyYAB!Tr%(=E0VD!-0TFC`YzzAJiYPDFB_9= zhd89LEwWdi+V@<2zJE29=BKU~vN4R}?jvi{#v|v{;A~eLrjAe_gU7fri2!A9g zydgHaF#Tb$DJQy79l^Wu%2NEFWoua?iw*p`zj$GhJI+1wM5?2 zsqtj`i}}x5z%0U7)0HR>oIrMGq)^OJ!1?Bw?A5^D!BET~-TWxwXV3ng`ypS5X1iUB zpRfKTyxq{W{vDB8+06hUdkq+Ul##7YmtvkPgUoz)X`&wF9&~-k1}17pSibprNyaL| zE**<4mm$4$@LdPiFLUm(duzDy@ftcpGVb~zp8Lho>*>SgGm%h#|5pSQKVdiYZx^52 z++*_|XAtvx!PocVs*U2}VL;QEr)-FB%D4NQEKOVX6bpJ@S0rwE(s8Wbn9r&43p4UW zh&0Z3JEgQ0Kzh9{oPylmfiaT^BsW>3n(VNR+B0VId^7(~qc>bv^2r%r z->F9~zzD)X>0{+&Uzd&+=XPYKi|=2IP@KFMjV93!rW&E$i~n53%h#_F#w#mH(Kv_e zjdeTH#AZvlAVV^~Y;~1zpg}}m`o70DOj>bB|4}ARb^3E?A zSd&+4J{4~VEa2Vpi}|{Ii6oF|=-x{C7zZ>o1V27DprW!EsN`lD(QvRMudPl9qG{Mc zttFk*-@klSbWzn0mfrXxut0V7bzBh~OD$1ETW9@FDq7;j>rKC=4FiUTiT+WKjm3c3 zo*sKWV|t_figYb~MF%684%v3*2h}(aaMsVhv+?iicC+_pC7aG542`Ef%5g6Tu0}yb zY^oA6&aZzAVY&NW=5YprwY+tB`)jhkn83@=Gd zgSVTmKvI~R#-v9dRMC%#0Ci<;rD_G6$SJfaQ47!pbbjj@?SlOge#jgDLBIG%MX3kq z-}zg0se~3W76E#I0U%_oZSZ^VPbDM3*h0%d{kQJ(cV;1A0to%rj6b!^0CQ^?$^SIw z@|Qf+);G8aFasTg(W9XJw^7^$f~;XQS_THrw!R35zf`(^DR&jobEKk$;t1bTAQ%V%LV+;g z-tRH}A62!6(V}tuM@!Z)ihq{=k;VSqhc%4y?}q+fV0+0wK0S|ur^B-!V$NKk({U<4RN?{@AD()`c=t-B=(1jtt&lYzhzu#JUQ(rHC+uv$*BS&Af zq8zPKceeFYL@VXp44r+w0-T)Djh+8)qaWao@cn%yyMqYw_VV@D@&4Tut!*d!OCYa_ zo~A)L$lDgJ$9FJ9Pw{LP;^pP>*F4M?4qn!O&hX#EAwtj3@Ovg=_rL9-^Zp*9@jnVJ zeoNfd{Zw3n(AIvZjsNPz&&`xm@cS*(cl0uJ@^x`Ab@9{mvUfu`So+!f zqE+@fe_{CD$Sc6#8b<2p>=oedpn#r#+D*&W&rQ)8eZ{asE6>qal0T=hx)Kt=M)I@# z{$2RJAbGHneMmNzTc7{2KZYDf4r5~@`H+G*NZ@znq2C|C46pz!0!!#Gav4|wR?%P5 z8qjUz=MsYWJyU^;r@easn#f;grn-aQpUDLNfzJHTs0@8wJdm77b|g3UpHplTeKh@# z+O7n=sbXzsW+E26NUtd36%_;*xCF8_i#Ba?a!#7G&C(>z)~wLb7D`*wR;Yj;78MW? z0TJAR$|j0{fPmi1;(AqFkj)K5L-T&YGnAeDaQn7ZngT3>CF9w}Whwv&B> z^ZFZ8TLj*9UWlxeNJKyOhvcl!?s3C`2%i)9sp>sPldZ2uXB0y1yT1@V|1ZklwKr#xx3!U9ns292#^+wl7 z2BB+FA9NkM9^H_I1&XX|b=GzE`3b5lx{|+yH}lJRC4Vp9vOoXNfC|q6a;yZzcv-Rx z^+Pv;xRwKAya))g1~6o!WGfngZbCPM-~b!YAZQO3(4r??$&o?=7|~-`V)&>UFz|+I zaORCEaMfVh@TDM2V?m2i z5zw>(P9hWV$eguSIjmK;8*u_Au16MBf~?4fN>Q1lCn~RO2E+h_%D+>zeh+O@Df>n= zrbZ`PI_>m!zL39-*L#{8YFx4W0gO^_(#f?tnTj(jWoi{uAT#My7MViH7FaAgIcqVg z1a(9e$Q@2whX>5J9eI!!RYC}sO^swMi1x|VhaB@keri4_gsM=u|KHOnLd_!iOov(6 zMSIBHtsIu9u1W3!KE+TRCD1T5995$v8i8s&092KU`li~1cNiRPUs;n%CL4HTX4(Jd zLR?)P8VPDG$h#fYp-~9pHmcSFC3hLXHLc#FRLEIYrYT_MGPPEtmFeVaxKe5uR-xBe z3K;lB6u=ad6sp37JS?3eJCb1Y&3(5x9+t_D3NXwX8m2rcd$UeKU;hX$2*Xps0rBB`R_nP{k~ z2e{memI!cpDd^KufXqwKG76bsO?l`!3Z4F8jj3w*s6yq4x_UU-rW{OsDDR;-NKN$x zw2HU$ZU|}6YB1Hc=a{Nv58MFILF>^5^fKCrHUZB!qgT+YFv!(`rpD$vA+i`w5hmDD z3qeIgvbi}x#}dMWx@Jx|nWvhs;9b14zp-NtU32w+E82#(qt`&y(`)Qh^$aC_K{c0N z>sgJ4W3)1s)0$*zIb)HTR2H?&Y%(!QjaI1uND#I6P4pJ%odE5Oz>H<+ZS)WH4tf{8 zhjyU%h2wFuZbzvOQ%4~72K7m|6U}wQEwDClFquAS8f1OKLoV=9;q+bF$klmqN*|(+ zguq=KL3j>qwBy*IXVFgdu|$P-QTGlx$^|IcT766 z4w`cSgkmYaL;%REaaY_8Unc2^|0LOpFULJ-^nkArG7WllHSQhDzmDb!jSV!Chw!}7 zksRX|qlpxx;mtnyeh8(5#A~ZY&Y7aClf_V|_Bw;B10(xF|dTa(2xaHlN^| z_;4P72R|I}bQpvjd7V*6&$AtWvf^$07kn+~AH>^yjE|&Y7T*9YiDn>GKr=i5Xz>g! z2WIg=3bS}Hmf@`M|KGx_*9A-4i4|B0oK#7!#s$8n#yU9f3(^pCePeU7ny>E4H;O~k z!?coo7l1W<8@?SEVuNH5F2+V|!c3O5vSY)47Z29)Blyw$sJ)oQ9K6zkORyE&a4B_s zxE$NzuM^uPTf?t`0XdSqVBCyn5fvMcft@dgV00?`Gs!Y#!&iMZ(|-` z%h&KVokFU~^No`a?kk@lm>u@wO7Q=}KrYIHcI?A`91wheCzbmCtX9sEV;5UV7>98b zhb3F-6h`tRJEt%brl6oxxY(mfoWwOaDLz`y*LOZzFFvZc=%Wp|0XN|W@zDmpq4UuO zap8)Ng}356Dc;m3nvzr-+VL1X7PpBwlO_r{lWyd~FJPNaVX?@S8l?=vP)4R^^^A;> z>&-G&Vb&CwR0=g`R*Os?k0%JOCga_OVOQY0@jaNw6Y(TGnTA|=3dIyav)q27OFEZ! z1(is1OXFzaT|x*3d6XchbEy;`)2ry{C^)$s+Ih<>;Pi4`0S7^<upB!zCXS!S`A z8IwYzP^lFbae4RSsWgV9uPcGHq-h17hNt5P@C^JQo+&KsAu*QB^blgnObZ?srX@T~ zZ)LSQJfWC?XWX~g%$@T7{GJd>(h5x`!@>{K{0h&OY{ql4b1eJ_o`)aB^TjMnQi`7h z0C^hzEd)5)iWlQ{$(Dd{!k@=#0;q16GkDt(~XRZ8QLb`Q1 zKP8W!l*doZ<0tdub22Wx6w_Fa0^eBv&J6Ia1f&_00XY$URs*dqLxZ3VQu{TK=F=qq zl;kwtfM3QN0l_xoSNOsGjT|q;QvA67#y-N8q-%!Q-`H0qiMlIS>68ixu~ZrevE(3J zJtLQyRq%BtR%4dyScQ+NYZ;wrqJg52w&N|?i96m-W6_8ZAJQ5jRBf7RCeGi@OXxJ$ z;5YD__$~Z4+KB&w-@)(V_wWu3C9lvhsO{9Y&}cH$oM>qkJxKtn6HuIJZt>K%CV8H} zC&SRri*zlgzmdqgyg0`nr4a^eHft?0A=vde5qAgorQoNS zKp~-%BtSBd1}M!sEvsQIGL=OM5tB-*k}+D1N>;$?^(viQ&Y1KXaXnw){a^v2kOYfa zh7aH`@j?8RU~`9r;5X|wwVtddJS&7Y|0C0aYz`mpD1R=;-#`%ZE&dK40i#+2vK9-V z=}_b-4Mgy9d;SSv!N2|oT>UY7>uGnO%Z2i6peo%kAIB64}zGb{4)6eK_QgM z%ZgkGBDlkVr}6iv4VZKRW1X5YR>6SDWk8#rp`B;I>^0-!^#BE6^qt3(s!XJiZ* zDh?r|K<#hr$QP-aK!(pK<#L%$!Lc&6+QQ288b&Qsv09T-uPe}L_2w{qxDGzp*Vo=U zHkrC$^^NqA^c0Ntp^wP*lJ4XN(l-Q|K&oz7E8Rt##V^=JZY2FB#bf~7y@}jRZXvgl zf$4KYvtyp@YdJrce}sRSpUuyQb4&$u*+~Wy8N6c%;>plThX+mog{?8+78QEZnSYCX z2qXncl~$qD==#csXyppEPNS7;w9wG&luC7hLakLw_&I|569rMGU%rSagv~n(XvN2* zfM|#ohSCu|xsBWon|id=19Ki>sZZ22L)!rb>HfySBCGTB`FZ@KP(;i9iXI&7R4oov zM2g`V`tC)fNFvrvBvr(;i0&LNO<6$z7pAn6#1gRF;T1-Qzz)RkGpT&cJ7^Fi_p z`9&c6r#_|4Hr`#>_zVKJVKMi6fbC+0FTICvQILI ze0tGQx4`be%lpXZBnX{vBwxUE_mczUOL7pVJP?rPFd)vilGIRn(QqWc^Z{e z{40Px^8tA_0|Nb>-^l;169bNs<6!KY@`-4JKad}x{FX7VT;y0xej-0ptG`%>3*ba2 z*8L)4T^6i$V#PlJE6z}?=u6$+I?zEj#$dL=yCQ+k!Omv>mAIq9out*eGW;&uK_!Mdcq!MfhaSeGCT>2=cU z0gE!*$?eh`q8p+ zo>j04lbVsKv z@}qbGehfc>pTtk&m*A5GuS1&j1>_kA@gaN|l7Jua8T>o`gAn*I!R7Edf*T<&)4?YQ zY{X4MBtaU#EwgsdSi0gS#3sPh@<@L{n0Bjo$SKw+YAWMO^b zTWmShTI^ zwW2qQ-YI&oXm`PP<&7E)Z*#IGm0NBo>Tlp@!yKyFaFVZ zrBP|DFpe_bXPj$%()hG-p>c(Az42w^CR0C?+Ei+CnS!R6=?>HVrbkTAn>LuXoA#KF zntnC?&JdS z&j#5lHp0f(TDFO8V<)k**aht4?33(zb{o5c{e(Tt{=}YSPqC-jGwko|9~{T|xq5Ci zcPBTNyNesgjpy#>cy1y$nVZ7h%iYIK<)(8pxP{ze?pbarw~SlOt>xBno48lF*SR;j zx4DnFFSrBTLGCvTvRrAo)-u3yv*lLHAj@Ej+@i1qED1}4WsGHtWwzxR%SOvK%WIa` zEjuiGEC(!yEx%dLmRwTOtt7wXijr$f29(H3G$q9)B_*zsU`b8M%#ue-+DlfK{H^5O zl8;M1FF9(pSl!m7b&R#mdY5%P`~v3v)~VL%)*05B)>+nvt+TCjt&dpeS?60Hvp#Np z!uphTt#zGsgLR{IlXbiGb?ckfcda|Dd#wAcpIQ%C4_be-No`$hm)i1e*Vt~f4Y4_G zep|#Avn6c9ZAn{=t;v?Mwb&-urr92_J!o5DTWi~B+irW;w%fMX_KEE?+t;?kw%=_3 zD(zC*qqKKvzfx;yMQN3gN0mL4koqpWLL|FYZ5Y-R2;Z<((w zRyL|^bXjBB+_I%*>&xCM+gY}&Y){#~vV&zu%f2t~S>C7o)^dG0SMDxPmbaDPTRyw| zneyf3Tg%@qKUDs^y_>zK{VMy__P+MP_91q;eX@PAeT99MeY1Us{R8`l_K)nJ+CR7N zw|{9rXg_2>Z2!jot^J7osQsAzxc!9vv;#SMIeI((;^^bJ&T+HjR>vU6P=~^Co1@TC zjch?ZtP?y4`auv9WTt=74Wp&lLM!M=<4X!3vn`@kFylb*+hHJiS zq3e0qCf8f86Ry)0msRwwP*s#vgey`N_f{;ZSX!~8Vo$}PihsJhxUY2ga}RYJ+~w|& zd%1g!`z`k__ip!I_m}Rk++Vv7yT5UN=RWE_=05KJ!TqEAXZK0>Dfemj8BY(-pFKT2 zS9yAQZt(Q;^!MEA8RSuU3Org*p{K}G<%xJkcxpX&cv7Bmo++N^JZn7fdp`H<_k8L3 z%Ja1sd%Jskd;58B^4{Vd=v8`e_p)BQ*WqpT-tB$FyU4rI`=R%9?-B3m%F8ORujDEn zmEp?KmE$U>SI)0oTDi`b?;GON_*h@um-5Z?&G#+vJ??AwE%7b&E%!a=Tj_h=x5~HL zx5l^Dx6ZfT_p)!JZz`A+-(RG=*|DKITCJ1{peFEBswd|-Xx)xfsEJAn@Z`vPAFjt9;J zFAZK5yg4{Dcw4X}XbYAF?LlWS5DW!tf=$6m!D+$S!BxS{!PkNx1V0OY5j+q)7(5g_ z9Q-zTB=}n>KXi5In$WeO0il7RzlLNXO~@RwhAKm~q1F%|nh}~AniZNIdOY+(Xl>|? z(4NqN(8185&~H`Jsw=9ltr}RxRfVc1R!y&(SGBZiZPk{l9aW!K9SvK;*03#H7WRgH zVShLnt_p|4k#H=W2oDPn4=2MT!nNVL@W}9}Fdv>2o)W$-3 zcv<-Q@T%~;;T_>U;eFwQ;jhBqhkuFmiQEz~Mwkd2u|%Aaiijst8)=E~kx7v$k^3T3 zBhw>KM^;DHM%G0(L^eh?M_!A(5&1CkMdV22ROEEzOyu`yzo;y#k8;t9Xeb(vMx*iQ zuxNF3M6@AU#2$?;h&>*AGWK+AVQg{i+1LxQ7h~&UpT)k59gqDI`!)8@IF3u> zUE-I;yT^OQZ;bynu8p&CcRUgw8Ly8w#K*+j;^X3cd{TUQd`)~~d`EnD{Hyqn@w17` n6MYglCDaK+qC62z)F;Ly#wR9 + + + badge + Created with Sketch. + + + + + + Stream Muxer + + + Compatibl + e + + + \ No newline at end of file From a0208f5908ab2b9869d5eabb478c34844a17b50c Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 10 Jul 2015 14:50:43 -0700 Subject: [PATCH 003/337] add intro and goal --- README.md | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index db71478..bbf1adc 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,12 @@ abstract-stream-muxer > A test suite and interface you can use to implement a stream muxer. +The primary goal of this module is to enable developers to pick and swap their stream muxing module as they see fit for their application, without having to go through shims or compatibility issues. This module and test suite was heavily inspired by [abstract-blog-store](https://github.com/maxogden/abstract-blob-store). + +Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. + +The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. + # Modules that implement the interface - @@ -22,10 +28,19 @@ Send a PR to add a new one if you happen to find or write one. A valid (read: that follows this abstraction) stream muxer, must implement the following API. -### `Node.js` muxer.attach(transport, function (err, conn)) || `Go` conn, err := muxer.attach(transport) +### Attach muxer to a transport + +- `Node.js` muxer.attach(transport, function (err, conn)) +- `Go` conn, err := muxer.attach(transport) -### `Node.js` conn.dialStream(function (err, stream)) || `Go` stream, err := conn.dialStream() +### Dial(open/create) a new stream + +- `Node.js` conn.dialStream(function (err, stream)) +- `Go` stream, err := conn.dialStream() -### `Node.js` conn.on('stream', function (stream)) || `Go` stream := conn.listen() +### Listen(wait/receive) a new incoming stream + +- `Node.js` conn.on('stream', function (stream)) +- `Go` stream := conn.listen() From 587e550197e22b6e43cf680755b611595bb7a48e Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 10 Jul 2015 15:33:56 -0700 Subject: [PATCH 004/337] add API description --- README.md | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index bbf1adc..e793446 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,8 @@ Send a PR to add a new one if you happen to find or write one. # Badge +Include this badge in your readme if you make a new module that uses abstract-stream-muxer API. + ![](/img/badge.png) # How to use @@ -30,17 +32,31 @@ A valid (read: that follows this abstraction) stream muxer, must implement the f ### Attach muxer to a transport -- `Node.js` muxer.attach(transport, function (err, conn)) -- `Go` conn, err := muxer.attach(transport) +- `Node.js` muxer.attach(transport, function (err, conn)) +- `Go` conn, err := muxer.Attach(transport) +This method attaches our stream muxer to the desired transport (UDP, TCP) and returns/callbacks with the `err, conn`(error, connection). + +If `err` is passed, no operation should be made in `conn`. + +`conn` abstracts our established Connection with the other endpoint, it must offer an interface to open a stream inside this connection and to receive incomming stream requests. ### Dial(open/create) a new stream - `Node.js` conn.dialStream(function (err, stream)) -- `Go` stream, err := conn.dialStream() +- `Go` stream, err := conn.DialStream() +This method negotiates and opens a new stream with the other endpoint. -### Listen(wait/receive) a new incoming stream +If `err` is passed, no operation should be made in `stream`. + +`stream` abstract our established Stream with the other endpoint, it must implement the [Duplex Stream interface](https://nodejs.org/api/stream.html#stream_class_stream_duplex) in Node.js or the [ReadWriteCloser](http://golang.org/pkg/io/#ReadWriteCloser) in Go. + +### Listen(wait/accept) a new incoming stream - `Node.js` conn.on('stream', function (stream)) -- `Go` stream := conn.listen() +- `Go` stream := conn.Accept() + +Each time a dialing peer initiates the new stream handshake, a new stream is created on the listening side. + +In Node.js, the Event Emitter pattern is expected to be used in order to receive new incoming streams, while in Go, it expects to wait when Accept is called. From 31d079cfa97307f7bcbba7fff7f6136567454bcb Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 10 Jul 2015 18:47:43 -0700 Subject: [PATCH 005/337] Landing off the field for test suite --- tests/base-test.js | 9 +++++++++ tests/index.js | 3 +++ 2 files changed, 12 insertions(+) create mode 100644 tests/base-test.js create mode 100644 tests/index.js diff --git a/tests/base-test.js b/tests/base-test.js new file mode 100644 index 0000000..e1daf38 --- /dev/null +++ b/tests/base-test.js @@ -0,0 +1,9 @@ +module.exports.all = function (test, common) { + test('see if this works', function (t) { + common.setup(test, function (err, muxer) { + t.ifError(err, 'Should not throw') + // write test here + t.end() + }) + }) +} diff --git a/tests/index.js b/tests/index.js new file mode 100644 index 0000000..af6bd7a --- /dev/null +++ b/tests/index.js @@ -0,0 +1,3 @@ +module.exports = function (test, common) { + require('./base-test.js').all(test, common) +} From 30a754b92d31d0631f7b8fba91683a6436b26099 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 10 Jul 2015 18:47:49 -0700 Subject: [PATCH 006/337] Landing off the field for test suite --- README.md | 6 ++++-- package.json | 28 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 package.json diff --git a/README.md b/README.md index e793446..6c33609 100644 --- a/README.md +++ b/README.md @@ -32,13 +32,15 @@ A valid (read: that follows this abstraction) stream muxer, must implement the f ### Attach muxer to a transport -- `Node.js` muxer.attach(transport, function (err, conn)) -- `Go` conn, err := muxer.Attach(transport) +- `Node.js` muxer.attach(transport, isListener, function (err, conn)) +- `Go` conn, err := muxer.Attach(transport, isListener) This method attaches our stream muxer to the desired transport (UDP, TCP) and returns/callbacks with the `err, conn`(error, connection). If `err` is passed, no operation should be made in `conn`. +`isListener` is a bool that tells the side of the socket we are, `isListener = true` for listener/server and `isListener = false` for dialer/client side. + `conn` abstracts our established Connection with the other endpoint, it must offer an interface to open a stream inside this connection and to receive incomming stream requests. ### Dial(open/create) a new stream diff --git a/package.json b/package.json new file mode 100644 index 0000000..4f399fa --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "abstract-stream-muxer", + "version": "0.0.0", + "description": "A test suite and interface you can use to implement a stream muxer.", + "main": "src/index.js", + "directories": { + "test": "tests" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/diasdavid/abstract-stream-muxer.git" + }, + "keywords": [ + "Streams", + "Muxer", + "Abstract", + "Interface" + ], + "author": "David Dias ", + "license": "MIT", + "bugs": { + "url": "https://github.com/diasdavid/abstract-stream-muxer/issues" + }, + "homepage": "https://github.com/diasdavid/abstract-stream-muxer" +} From 1d0cc68645267f516c54a19d65356d94433acb86 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 10 Jul 2015 22:02:57 -0700 Subject: [PATCH 007/337] base tests --- package.json | 5 ++++- tests/base-test.js | 50 ++++++++++++++++++++++++++++++++++++++++---- tests/index.js | 1 + tests/stress-test.js | 30 ++++++++++++++++++++++++++ 4 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 tests/stress-test.js diff --git a/package.json b/package.json index 4f399fa..f99c2b4 100644 --- a/package.json +++ b/package.json @@ -24,5 +24,8 @@ "bugs": { "url": "https://github.com/diasdavid/abstract-stream-muxer/issues" }, - "homepage": "https://github.com/diasdavid/abstract-stream-muxer" + "homepage": "https://github.com/diasdavid/abstract-stream-muxer", + "dependencies": { + "stream-pair": "^1.0.3" + } } diff --git a/tests/base-test.js b/tests/base-test.js index e1daf38..251aa2a 100644 --- a/tests/base-test.js +++ b/tests/base-test.js @@ -1,9 +1,51 @@ +var streamPair = require('stream-pair') + module.exports.all = function (test, common) { - test('see if this works', function (t) { - common.setup(test, function (err, muxer) { + + test('Open a stream from the dealer', function (t) { + common.setup(test, function (err, Muxer) { + t.plan(4) t.ifError(err, 'Should not throw') - // write test here - t.end() + + var pair = streamPair.create() + var dialer = new Muxer() + var listener = new Muxer() + + var connDialer = dialer.attach(pair) + var connListener = listener.attach(pair.other) + + connDialer.dialStream(function (err, stream) { + t.ifError(err, 'Should not throw') + t.pass('dialed stream') + }) + + connListener.on('stream', function (stream) { + t.pass('got stream') + }) }) }) + + test('Open a stream from the listener', function (t) { + common.setup(test, function (err, Muxer) { + t.plan(4) + t.ifError(err, 'Should not throw') + + var pair = streamPair.create() + var dialer = new Muxer() + var listener = new Muxer() + + var connDialer = dialer.attach(pair) + var connListener = listener.attach(pair.other) + + connListener.dialStream(function (err, stream) { + t.ifError(err, 'Should not throw') + t.pass('dialed stream') + }) + + connDialer.on('stream', function (stream) { + t.pass('got stream') + }) + }) + }) + } diff --git a/tests/index.js b/tests/index.js index af6bd7a..004b44a 100644 --- a/tests/index.js +++ b/tests/index.js @@ -1,3 +1,4 @@ module.exports = function (test, common) { require('./base-test.js').all(test, common) + require('./stress-test.js').all(test, common) } diff --git a/tests/stress-test.js b/tests/stress-test.js new file mode 100644 index 0000000..514e04c --- /dev/null +++ b/tests/stress-test.js @@ -0,0 +1,30 @@ +/* knobs - nStreams, nMsg, sizeMsg[low, high] */ + +var streamPair = require('stream-pair') + +module.exports.all = function (test, common) { + + test('Open a stream from the dealer', function (t) { + common.setup(test, function (err, Muxer) { + t.plan(4) + t.ifError(err, 'Should not throw') + + var pair = streamPair.create() + var dialer = new Muxer() + var listener = new Muxer() + + var connDialer = dialer.attach(pair) + var connListener = listener.attach(pair.other) + + connDialer.dialStream(function (err, stream) { + t.ifError(err, 'Should not throw') + t.pass('dialed stream') + }) + + connListener.on('stream', function (stream) { + t.pass('got stream') + }) + }) + }) + +} From 43e6ccf0f66122823fca1402e37c10fb04f54b93 Mon Sep 17 00:00:00 2001 From: David Dias Date: Sat, 11 Jul 2015 19:17:33 -0700 Subject: [PATCH 008/337] more tests and readme up --- README.md | 2 +- package.json | 1 + tests/stress-test.js | 30 +++++++++++------------------- 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 6c33609..fd9785a 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ The API is presented with both Node.js and Go primitives, however, there is not # Modules that implement the interface -- +- [https://github.com/diasdavid/node-spdy-stream-muxer](Node.js spdy-stream-muxer) - stream-muxer abstraction on top of [spdy-transport](https://github.com/indutny/spdy-transport) Send a PR to add a new one if you happen to find or write one. diff --git a/package.json b/package.json index f99c2b4..f4bbdab 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ }, "homepage": "https://github.com/diasdavid/abstract-stream-muxer", "dependencies": { + "dev-null": "^0.1.1", "stream-pair": "^1.0.3" } } diff --git a/tests/stress-test.js b/tests/stress-test.js index 514e04c..4870a5a 100644 --- a/tests/stress-test.js +++ b/tests/stress-test.js @@ -1,30 +1,22 @@ -/* knobs - nStreams, nMsg, sizeMsg[low, high] */ - var streamPair = require('stream-pair') +var devNull = require('dev-null') module.exports.all = function (test, common) { - test('Open a stream from the dealer', function (t) { + test('1 stream with 10Mb file', function (t) { common.setup(test, function (err, Muxer) { - t.plan(4) - t.ifError(err, 'Should not throw') - + t.ifError(err, 'should not throw') var pair = streamPair.create() - var dialer = new Muxer() - var listener = new Muxer() - var connDialer = dialer.attach(pair) - var connListener = listener.attach(pair.other) - - connDialer.dialStream(function (err, stream) { - t.ifError(err, 'Should not throw') - t.pass('dialed stream') - }) - - connListener.on('stream', function (stream) { - t.pass('got stream') - }) + spawnGeneration(t, Muxer, pair, pair.other, 1, [10, 10]) }) }) +} + +function spawnGeneration (t, Muxer, dialerSocket, listenerSocket, nStreams, sizeWindow) { } + +function randSizeMsg (sizeWindow) { + return Math.floor(Math.random() * (sizeWindow[1] - sizeWindow[0] + 1)) + sizeWindow[0] +} From e46a24055cdb86359eb4de0396d50b248207c93a Mon Sep 17 00:00:00 2001 From: David Dias Date: Sat, 11 Jul 2015 21:10:09 -0700 Subject: [PATCH 009/337] still WIP notice --- README.md | 2 ++ package.json | 1 + tests/stress-test.js | 17 +++++++++++++---- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fd9785a..16d8bde 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ abstract-stream-muxer ===================== +> **STILL WIP** + [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) > A test suite and interface you can use to implement a stream muxer. diff --git a/package.json b/package.json index f4bbdab..e2713f6 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "homepage": "https://github.com/diasdavid/abstract-stream-muxer", "dependencies": { "dev-null": "^0.1.1", + "random-bytes-stream": "^0.1.0", "stream-pair": "^1.0.3" } } diff --git a/tests/stress-test.js b/tests/stress-test.js index 4870a5a..2f00837 100644 --- a/tests/stress-test.js +++ b/tests/stress-test.js @@ -1,9 +1,10 @@ var streamPair = require('stream-pair') var devNull = require('dev-null') +var bytesStream = require('random-bytes-stream') module.exports.all = function (test, common) { - test('1 stream with 10Mb file', function (t) { + test('1 stream with 64Mb file', function (t) { common.setup(test, function (err, Muxer) { t.ifError(err, 'should not throw') var pair = streamPair.create() @@ -17,6 +18,14 @@ function spawnGeneration (t, Muxer, dialerSocket, listenerSocket, nStreams, size } -function randSizeMsg (sizeWindow) { - return Math.floor(Math.random() * (sizeWindow[1] - sizeWindow[0] + 1)) + sizeWindow[0] -} +// function randSizeMsg (sizeWindow) { +// return Math.floor(Math.random() * (sizeWindow[1] - sizeWindow[0] + 1)) + sizeWindow[0] +// } + +// tests list: +// SubtestStress1Conn1Stream1Msg +// SubtestStress1Conn1Stream100Msg +// SubtestStress1Conn100Stream100Msg +// SubtestStress1Conn1000Stream10Msg +// SubtestStress1Conn1000Stream100Msg10MB + From 21c5e4f9106aaeed8bb7e038921088ef1494922e Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 13 Jul 2015 10:36:28 -0700 Subject: [PATCH 010/337] simple stress test --- tests/stress-test.js | 54 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/tests/stress-test.js b/tests/stress-test.js index 2f00837..dad8cb5 100644 --- a/tests/stress-test.js +++ b/tests/stress-test.js @@ -1,20 +1,64 @@ var streamPair = require('stream-pair') -var devNull = require('dev-null') -var bytesStream = require('random-bytes-stream') +// var devNull = require('dev-null') +// var bytesStream = require('random-bytes-stream') module.exports.all = function (test, common) { - test('1 stream with 64Mb file', function (t) { + test('1 stream with 1 msg', function (t) { common.setup(test, function (err, Muxer) { t.ifError(err, 'should not throw') var pair = streamPair.create() - spawnGeneration(t, Muxer, pair, pair.other, 1, [10, 10]) + spawnGeneration(t, Muxer, pair, pair.other, 1, 1) }) }) } -function spawnGeneration (t, Muxer, dialerSocket, listenerSocket, nStreams, sizeWindow) { +function spawnGeneration (t, Muxer, dialerSocket, listenerSocket, nStreams, nMsg, sizeWindow) { + t.plan(6) + + var msg = 'simple msg' + + var listenerMuxer = new Muxer() + var dialerMuxer = new Muxer() + + var listenerConn = listenerMuxer.attach(listenerSocket) + var dialerConn = dialerMuxer.attach(dialerSocket) + + listenerConn.on('stream', function (stream) { + t.pass('Incoming stream') + + stream.on('data', function (chunk) { + + }) + + stream.on('end', function () { + t.pass('Stream ended on Listener') + // stream.end() + }) + + }) + + for (var i = 0; i < nStreams; i++) { + dialerConn.dialStream(function (err, stream) { + t.ifError(err, 'Should not throw') + t.pass('Dialed stream') + + for (var j = 0; j < nMsg; j++) { + stream.write(msg) + } + + stream.on('data', function (chunk) { + t.fail('Should not happen') + }) + + stream.on('end', function () { + t.pass('Stream ended on Dialer') + }) + + stream.end() + }) + } } From a72934081e4dd76edd646f49537d757c95ca83d6 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 13 Jul 2015 14:42:27 -0700 Subject: [PATCH 011/337] more tests --- README.md | 4 ++-- tests/stress-test.js | 24 +++++++++++++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 16d8bde..3b4ded5 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ abstract-stream-muxer [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) -> A test suite and interface you can use to implement a stream muxer. +> A test suite and interface you can use to implement a stream muxer. "A one stop shop for all your muxing needs" The primary goal of this module is to enable developers to pick and swap their stream muxing module as they see fit for their application, without having to go through shims or compatibility issues. This module and test suite was heavily inspired by [abstract-blog-store](https://github.com/maxogden/abstract-blob-store). @@ -34,7 +34,7 @@ A valid (read: that follows this abstraction) stream muxer, must implement the f ### Attach muxer to a transport -- `Node.js` muxer.attach(transport, isListener, function (err, conn)) +- `Node.js` conn = muxer.attach(transport, isListener) - `Go` conn, err := muxer.Attach(transport, isListener) This method attaches our stream muxer to the desired transport (UDP, TCP) and returns/callbacks with the `err, conn`(error, connection). diff --git a/tests/stress-test.js b/tests/stress-test.js index dad8cb5..c3ff74b 100644 --- a/tests/stress-test.js +++ b/tests/stress-test.js @@ -12,29 +12,39 @@ module.exports.all = function (test, common) { spawnGeneration(t, Muxer, pair, pair.other, 1, 1) }) }) + + test('1 stream with 10 msg', function (t) { + common.setup(test, function (err, Muxer) { + t.ifError(err, 'should not throw') + var pair = streamPair.create() + + spawnGeneration(t, Muxer, pair, pair.other, 1, 10) + }) + }) + } -function spawnGeneration (t, Muxer, dialerSocket, listenerSocket, nStreams, nMsg, sizeWindow) { - t.plan(6) +function spawnGeneration (t, Muxer, dialerSocket, listenerSocket, nStreams, nMsg, size) { + t.plan(6 + (nStreams * nMsg)) - var msg = 'simple msg' + var msg = !size ? 'simple msg' : 'aaa' var listenerMuxer = new Muxer() var dialerMuxer = new Muxer() - var listenerConn = listenerMuxer.attach(listenerSocket) - var dialerConn = dialerMuxer.attach(dialerSocket) + var listenerConn = listenerMuxer.attach(listenerSocket, true) + var dialerConn = dialerMuxer.attach(dialerSocket, false) listenerConn.on('stream', function (stream) { t.pass('Incoming stream') stream.on('data', function (chunk) { - + t.pass('Received message') }) stream.on('end', function () { t.pass('Stream ended on Listener') - // stream.end() + stream.end() }) }) From c936368ccee0ff2bea08887b49251f3a7943ee27 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 13 Jul 2015 16:37:25 -0700 Subject: [PATCH 012/337] Add the rest of the stress-tests, separate the mega stress test to be optional, update readme --- README.md | 28 ++++++++-- tests/index.js | 5 +- tests/mega-stress-test.js | 62 ++++++++++++++++++++++ tests/stress-test.js | 107 ++++++++++++++++++++++++++++++++------ 4 files changed, 182 insertions(+), 20 deletions(-) create mode 100644 tests/mega-stress-test.js diff --git a/README.md b/README.md index 3b4ded5..071b963 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ abstract-stream-muxer ===================== -> **STILL WIP** - [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) > A test suite and interface you can use to implement a stream muxer. "A one stop shop for all your muxing needs" @@ -25,8 +23,32 @@ Include this badge in your readme if you make a new module that uses abstract-st ![](/img/badge.png) -# How to use +# How to use the battery tests +## Node.js + +Install abstract-stream-muxer as one of the dependencies of your project and as a test file, using `tap`, `tape` or a test runner with compatible API, do: + +``` +var tape = require('tape') +var tests = require('abstract-stream-muxer/tests') +var YourStreamMuxer = require('../src') + +var common = { + setup: function (t, cb) { + cb(null, YourStreamMuxer) + }, + teardown: function (t, cb) { + cb() + } +} + +tests(tape, common) +``` + +## Go + +> WIP - being written # API diff --git a/tests/index.js b/tests/index.js index 004b44a..d146afa 100644 --- a/tests/index.js +++ b/tests/index.js @@ -1,4 +1,7 @@ -module.exports = function (test, common) { +module.exports = function (test, common, mega) { require('./base-test.js').all(test, common) require('./stress-test.js').all(test, common) + if (mega) { + require('./mega-stress-test.js').all(test, common) + } } diff --git a/tests/mega-stress-test.js b/tests/mega-stress-test.js new file mode 100644 index 0000000..94fe101 --- /dev/null +++ b/tests/mega-stress-test.js @@ -0,0 +1,62 @@ +var streamPair = require('stream-pair') + +module.exports.all = function (test, common) { + + test('10000 messages of 10000 streams', function (t) { + common.setup(test, function (err, Muxer) { + t.ifError(err, 'should not throw') + var pair = streamPair.create() + + spawnGeneration(t, Muxer, pair, pair.other, 10000, 10000) + }) + }) + +} + +function spawnGeneration (t, Muxer, dialerSocket, listenerSocket, nStreams, nMsg, size) { + t.plan(1 + (5 * nStreams) + (nStreams * nMsg)) + + var msg = !size ? 'simple msg' : 'make the msg bigger' + + var listenerMuxer = new Muxer() + var dialerMuxer = new Muxer() + + var listenerConn = listenerMuxer.attach(listenerSocket, true) + var dialerConn = dialerMuxer.attach(dialerSocket, false) + + listenerConn.on('stream', function (stream) { + t.pass('Incoming stream') + + stream.on('data', function (chunk) { + t.pass('Received message') + }) + + stream.on('end', function () { + t.pass('Stream ended on Listener') + stream.end() + }) + + }) + + for (var i = 0; i < nStreams; i++) { + dialerConn.dialStream(function (err, stream) { + t.ifError(err, 'Should not throw') + t.pass('Dialed stream') + + for (var j = 0; j < nMsg; j++) { + stream.write(msg) + } + + stream.on('data', function (chunk) { + t.fail('Should not happen') + }) + + stream.on('end', function () { + t.pass('Stream ended on Dialer') + }) + + stream.end() + }) + } + +} diff --git a/tests/stress-test.js b/tests/stress-test.js index c3ff74b..c41d2ff 100644 --- a/tests/stress-test.js +++ b/tests/stress-test.js @@ -1,6 +1,4 @@ var streamPair = require('stream-pair') -// var devNull = require('dev-null') -// var bytesStream = require('random-bytes-stream') module.exports.all = function (test, common) { @@ -22,12 +20,101 @@ module.exports.all = function (test, common) { }) }) + test('1 stream with 100 msg', function (t) { + common.setup(test, function (err, Muxer) { + t.ifError(err, 'should not throw') + var pair = streamPair.create() + + spawnGeneration(t, Muxer, pair, pair.other, 1, 100) + }) + }) + + test('10 stream with 1 msg', function (t) { + common.setup(test, function (err, Muxer) { + t.ifError(err, 'should not throw') + var pair = streamPair.create() + + spawnGeneration(t, Muxer, pair, pair.other, 10, 1) + }) + }) + + test('10 stream with 10 msg', function (t) { + common.setup(test, function (err, Muxer) { + t.ifError(err, 'should not throw') + var pair = streamPair.create() + + spawnGeneration(t, Muxer, pair, pair.other, 10, 10) + }) + }) + + test('10 stream with 100 msg', function (t) { + common.setup(test, function (err, Muxer) { + t.ifError(err, 'should not throw') + var pair = streamPair.create() + + spawnGeneration(t, Muxer, pair, pair.other, 10, 10) + }) + }) + + test('100 stream with 1 msg', function (t) { + common.setup(test, function (err, Muxer) { + t.ifError(err, 'should not throw') + var pair = streamPair.create() + + spawnGeneration(t, Muxer, pair, pair.other, 100, 1) + }) + }) + + test('100 stream with 10 msg', function (t) { + common.setup(test, function (err, Muxer) { + t.ifError(err, 'should not throw') + var pair = streamPair.create() + + spawnGeneration(t, Muxer, pair, pair.other, 100, 10) + }) + }) + + test('100 stream with 100 msg', function (t) { + common.setup(test, function (err, Muxer) { + t.ifError(err, 'should not throw') + var pair = streamPair.create() + + spawnGeneration(t, Muxer, pair, pair.other, 100, 10) + }) + }) + + test('1000 stream with 1 msg', function (t) { + common.setup(test, function (err, Muxer) { + t.ifError(err, 'should not throw') + var pair = streamPair.create() + + spawnGeneration(t, Muxer, pair, pair.other, 1000, 1) + }) + }) + + test('1000 stream with 10 msg', function (t) { + common.setup(test, function (err, Muxer) { + t.ifError(err, 'should not throw') + var pair = streamPair.create() + + spawnGeneration(t, Muxer, pair, pair.other, 1000, 10) + }) + }) + + test('1000 stream with 100 msg', function (t) { + common.setup(test, function (err, Muxer) { + t.ifError(err, 'should not throw') + var pair = streamPair.create() + + spawnGeneration(t, Muxer, pair, pair.other, 1000, 100) + }) + }) } function spawnGeneration (t, Muxer, dialerSocket, listenerSocket, nStreams, nMsg, size) { - t.plan(6 + (nStreams * nMsg)) + t.plan(1 + (5 * nStreams) + (nStreams * nMsg)) - var msg = !size ? 'simple msg' : 'aaa' + var msg = !size ? 'simple msg' : 'make the msg bigger' var listenerMuxer = new Muxer() var dialerMuxer = new Muxer() @@ -71,15 +158,3 @@ function spawnGeneration (t, Muxer, dialerSocket, listenerSocket, nStreams, nMsg } } - -// function randSizeMsg (sizeWindow) { -// return Math.floor(Math.random() * (sizeWindow[1] - sizeWindow[0] + 1)) + sizeWindow[0] -// } - -// tests list: -// SubtestStress1Conn1Stream1Msg -// SubtestStress1Conn1Stream100Msg -// SubtestStress1Conn100Stream100Msg -// SubtestStress1Conn1000Stream10Msg -// SubtestStress1Conn1000Stream100Msg10MB - From e6f31ebc92fcc33dd41cf8937fffcca0cd435c71 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 13 Jul 2015 16:38:53 -0700 Subject: [PATCH 013/337] Release v0.1.0. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e2713f6..e1cd19d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abstract-stream-muxer", - "version": "0.0.0", + "version": "0.1.0", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "directories": { From 203a63c16ef44b4a9c17f544584fab804a493e5e Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 13 Jul 2015 16:42:31 -0700 Subject: [PATCH 014/337] remove unsued deps --- package.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/package.json b/package.json index e1cd19d..0c90e17 100644 --- a/package.json +++ b/package.json @@ -26,8 +26,6 @@ }, "homepage": "https://github.com/diasdavid/abstract-stream-muxer", "dependencies": { - "dev-null": "^0.1.1", - "random-bytes-stream": "^0.1.0", "stream-pair": "^1.0.3" } } From 5c0507f2100f0139b0a916a2d24fe96e99fdbdf9 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 13 Jul 2015 17:34:11 -0700 Subject: [PATCH 015/337] update the list of modules that use this abstraction --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 071b963..0f06c80 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,9 @@ The API is presented with both Node.js and Go primitives, however, there is not # Modules that implement the interface -- [https://github.com/diasdavid/node-spdy-stream-muxer](Node.js spdy-stream-muxer) - stream-muxer abstraction on top of [spdy-transport](https://github.com/indutny/spdy-transport) +- [Node.js spdy-stream-muxer](https://github.com/diasdavid/node-spdy-stream-muxer) - stream-muxer abstraction on top of [spdy-transport](https://github.com/indutny/spdy-transport) +- [Node.js multiplex-stream-muxer](https://github.com/diasdavid/node-multiplex-stream-muxer) - stream-muxer abstraction on top of [multiplex](https://github.com/maxogden/multiplex) +- [Go spdy, muxado, yamux and multiplex](https://github.com/jbenet/go-stream-muxer) Send a PR to add a new one if you happen to find or write one. From 10e6728d64889a948ca336f9a25d5750bdcad822 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 13 Jul 2015 17:34:25 -0700 Subject: [PATCH 016/337] Release v0.1.1. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0c90e17..f0f2369 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abstract-stream-muxer", - "version": "0.1.0", + "version": "0.1.1", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "directories": { From 2e90edebea27fd329bc2424234e02268545b24d4 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 14 Jul 2015 13:27:03 -0700 Subject: [PATCH 017/337] Update the spec to follow #1 idea, write tests to check for that --- README.md | 9 +++++-- tests/base-test.js | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0f06c80..5686e96 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,9 @@ var common = { } } -tests(tape, common) +var megaTest = false // a really really intensive test case + +tests(tape, common, megaTest) ``` ## Go @@ -71,7 +73,8 @@ If `err` is passed, no operation should be made in `conn`. ### Dial(open/create) a new stream -- `Node.js` conn.dialStream(function (err, stream)) + +- `Node.js` stream = conn.dialStream([function (err, stream)]) - `Go` stream, err := conn.DialStream() This method negotiates and opens a new stream with the other endpoint. @@ -80,6 +83,8 @@ If `err` is passed, no operation should be made in `stream`. `stream` abstract our established Stream with the other endpoint, it must implement the [Duplex Stream interface](https://nodejs.org/api/stream.html#stream_class_stream_duplex) in Node.js or the [ReadWriteCloser](http://golang.org/pkg/io/#ReadWriteCloser) in Go. +In the Node.js case, if no callback is passed, stream will emit an 'ready' event when it is prepared or a 'error' event if it fails to establish the connection, until then, it will buffer the 'write' calls. + ### Listen(wait/accept) a new incoming stream - `Node.js` conn.on('stream', function (stream)) diff --git a/tests/base-test.js b/tests/base-test.js index 251aa2a..cbef149 100644 --- a/tests/base-test.js +++ b/tests/base-test.js @@ -48,4 +48,66 @@ module.exports.all = function (test, common) { }) }) + test('Open a stream using the net.connect pattern', function (t) { + common.setup(test, function (err, Muxer) { + t.plan(3) + t.ifError(err, 'Should not throw') + + var pair = streamPair.create() + var dialer = new Muxer() + var listener = new Muxer() + + var connDialer = dialer.attach(pair) + var connListener = listener.attach(pair.other) + + var stream = connListener.dialStream() + + stream.on('ready', function () { + t.pass('dialed stream') + }) + + stream.on('error', function (err) { + t.ifError(err, 'Should not throw') + }) + + connDialer.on('stream', function (stream) { + t.pass('got stream') + }) + }) + }) + + test('Buffer writes Open a stream using the net.connect pattern', function (t) { + common.setup(test, function (err, Muxer) { + t.plan(4) + t.ifError(err, 'Should not throw') + + var pair = streamPair.create() + var dialer = new Muxer() + var listener = new Muxer() + + var connDialer = dialer.attach(pair) + var connListener = listener.attach(pair.other) + + var stream = connListener.dialStream() + + stream.write('buffer this') + + stream.on('ready', function () { + t.pass('dialed stream') + }) + + stream.on('error', function (err) { + t.ifError(err, 'Should not throw') + }) + + connDialer.on('stream', function (stream) { + t.pass('got stream') + + stream.on('data', function (chunk) { + t.equal(chunk.toString(), 'buffer this') + }) + }) + }) + }) + } From 9e467255fa8a630670a62931ce420abe27ab091b Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 14 Jul 2015 13:27:12 -0700 Subject: [PATCH 018/337] Release v0.2.0. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f0f2369..ce4ee1d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abstract-stream-muxer", - "version": "0.1.1", + "version": "0.2.0", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "directories": { From 323be11018683c1fd9bde98933cfb1b6a7a4208a Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 14 Jul 2015 16:43:20 -0700 Subject: [PATCH 019/337] add flags for isServer on tests --- tests/base-test.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/base-test.js b/tests/base-test.js index cbef149..2b1d59c 100644 --- a/tests/base-test.js +++ b/tests/base-test.js @@ -11,8 +11,8 @@ module.exports.all = function (test, common) { var dialer = new Muxer() var listener = new Muxer() - var connDialer = dialer.attach(pair) - var connListener = listener.attach(pair.other) + var connDialer = dialer.attach(pair, false) + var connListener = listener.attach(pair.other, true) connDialer.dialStream(function (err, stream) { t.ifError(err, 'Should not throw') @@ -34,8 +34,8 @@ module.exports.all = function (test, common) { var dialer = new Muxer() var listener = new Muxer() - var connDialer = dialer.attach(pair) - var connListener = listener.attach(pair.other) + var connDialer = dialer.attach(pair, false) + var connListener = listener.attach(pair.other, true) connListener.dialStream(function (err, stream) { t.ifError(err, 'Should not throw') @@ -57,8 +57,8 @@ module.exports.all = function (test, common) { var dialer = new Muxer() var listener = new Muxer() - var connDialer = dialer.attach(pair) - var connListener = listener.attach(pair.other) + var connDialer = dialer.attach(pair, false) + var connListener = listener.attach(pair.other, true) var stream = connListener.dialStream() @@ -85,8 +85,8 @@ module.exports.all = function (test, common) { var dialer = new Muxer() var listener = new Muxer() - var connDialer = dialer.attach(pair) - var connListener = listener.attach(pair.other) + var connDialer = dialer.attach(pair, false) + var connListener = listener.attach(pair.other, true) var stream = connListener.dialStream() From 8853a85d9157dd096df339f963302c18e5092365 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 14 Jul 2015 16:43:28 -0700 Subject: [PATCH 020/337] Release v0.2.1. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ce4ee1d..a80c105 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abstract-stream-muxer", - "version": "0.2.0", + "version": "0.2.1", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "directories": { From 9de74aea843fbdef9ede16daaa4f1d6155cd8088 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 14 Jul 2015 19:04:18 -0700 Subject: [PATCH 021/337] open stream in both sides test --- tests/base-test.js | 32 ++++++++++++++++++++++++++++++++ tests/index.js | 2 +- tests/stress-test.js | 1 + 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/tests/base-test.js b/tests/base-test.js index 2b1d59c..f7cc295 100644 --- a/tests/base-test.js +++ b/tests/base-test.js @@ -48,6 +48,38 @@ module.exports.all = function (test, common) { }) }) + test('Open a stream on both sides', function (t) { + common.setup(test, function (err, Muxer) { + t.plan(7) + t.ifError(err, 'Should not throw') + + var pair = streamPair.create() + var dialer = new Muxer() + var listener = new Muxer() + + var connDialer = dialer.attach(pair, false) + var connListener = listener.attach(pair.other, true) + + connDialer.dialStream(function (err, stream) { + t.ifError(err, 'Should not throw') + t.pass('dialed stream from dialer') + }) + + connListener.on('stream', function (stream) { + t.pass('listener got stream') + }) + + connListener.dialStream(function (err, stream) { + t.ifError(err, 'Should not throw') + t.pass('dialed stream from listener') + }) + + connDialer.on('stream', function (stream) { + t.pass('dialer got stream') + }) + }) + }) + test('Open a stream using the net.connect pattern', function (t) { common.setup(test, function (err, Muxer) { t.plan(3) diff --git a/tests/index.js b/tests/index.js index d146afa..114d2f1 100644 --- a/tests/index.js +++ b/tests/index.js @@ -1,6 +1,6 @@ module.exports = function (test, common, mega) { require('./base-test.js').all(test, common) - require('./stress-test.js').all(test, common) + // require('./stress-test.js').all(test, common) if (mega) { require('./mega-stress-test.js').all(test, common) } diff --git a/tests/stress-test.js b/tests/stress-test.js index c41d2ff..a70c199 100644 --- a/tests/stress-test.js +++ b/tests/stress-test.js @@ -109,6 +109,7 @@ module.exports.all = function (test, common) { spawnGeneration(t, Muxer, pair, pair.other, 1000, 100) }) }) + } function spawnGeneration (t, Muxer, dialerSocket, listenerSocket, nStreams, nMsg, size) { From 8984a305b458a67fe57cd723a55460a6234307ca Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 14 Jul 2015 19:05:07 -0700 Subject: [PATCH 022/337] Release v0.2.2. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a80c105..216489e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abstract-stream-muxer", - "version": "0.2.1", + "version": "0.2.2", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "directories": { From f82a4caec9c07e223703fed2f9b563675ccfc994 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 14 Jul 2015 23:23:08 -0700 Subject: [PATCH 023/337] uncomment stress test --- tests/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/index.js b/tests/index.js index 114d2f1..d146afa 100644 --- a/tests/index.js +++ b/tests/index.js @@ -1,6 +1,6 @@ module.exports = function (test, common, mega) { require('./base-test.js').all(test, common) - // require('./stress-test.js').all(test, common) + require('./stress-test.js').all(test, common) if (mega) { require('./mega-stress-test.js').all(test, common) } From d566f9f96c59b9c231de0aa4ba6e7bf5e2aaee15 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 14 Jul 2015 23:23:16 -0700 Subject: [PATCH 024/337] Release v0.2.3. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 216489e..acd5e74 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abstract-stream-muxer", - "version": "0.2.2", + "version": "0.2.3", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "directories": { From a454989cf83e62f38b4206e3c9d9a3c110f592b6 Mon Sep 17 00:00:00 2001 From: David Dias Date: Wed, 22 Jul 2015 13:00:10 -0700 Subject: [PATCH 025/337] add timed-tape --- package.json | 3 ++- tests/base-test.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ tests/index.js | 3 +++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index acd5e74..8a43fe7 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ }, "homepage": "https://github.com/diasdavid/abstract-stream-muxer", "dependencies": { - "stream-pair": "^1.0.3" + "stream-pair": "^1.0.3", + "timed-tape": "^0.1.0" } } diff --git a/tests/base-test.js b/tests/base-test.js index f7cc295..c91b2d5 100644 --- a/tests/base-test.js +++ b/tests/base-test.js @@ -80,6 +80,51 @@ module.exports.all = function (test, common) { }) }) + test('Open a stream on one side, write, open a stream in the other side', function (t) { + common.setup(test, function (err, Muxer) { + t.plan(9) + t.ifError(err, 'Should not throw') + + var pair = streamPair.create() + var dialer = new Muxer() + var listener = new Muxer() + + var connDialer = dialer.attach(pair, false) + var connListener = listener.attach(pair.other, true) + + connDialer.dialStream(function (err, stream) { + t.ifError(err, 'Should not throw') + t.pass('dialed stream from dialer') + + stream.write('hey') + }) + + connListener.on('stream', function (stream) { + t.pass('listener got stream') + + stream.on('data', function (chunk) { + t.equal(chunk.toString(), 'hey') + }) + + connListener.dialStream(function (err, stream) { + t.ifError(err, 'Should not throw') + t.pass('dialed stream from listener') + + stream.write('hello') + }) + + }) + + connDialer.on('stream', function (stream) { + t.pass('dialer got stream') + + stream.on('data', function (chunk) { + t.equal(chunk.toString(), 'hello') + }) + }) + }) + }) + test('Open a stream using the net.connect pattern', function (t) { common.setup(test, function (err, Muxer) { t.plan(3) diff --git a/tests/index.js b/tests/index.js index d146afa..1a1d43b 100644 --- a/tests/index.js +++ b/tests/index.js @@ -1,4 +1,7 @@ +var timed = require('timed-tape') + module.exports = function (test, common, mega) { + test = timed(test) require('./base-test.js').all(test, common) require('./stress-test.js').all(test, common) if (mega) { From 015466f672d25c6f6dad976590d7e21c854649c2 Mon Sep 17 00:00:00 2001 From: David Dias Date: Wed, 22 Jul 2015 13:00:24 -0700 Subject: [PATCH 026/337] Release v0.2.4. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8a43fe7..9aadda3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abstract-stream-muxer", - "version": "0.2.3", + "version": "0.2.4", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "directories": { From b6a9f1fa1b86dcd585f48df8273f5c66a541e415 Mon Sep 17 00:00:00 2001 From: Jeffrey Hulten Date: Mon, 27 Jul 2015 15:17:40 -0700 Subject: [PATCH 027/337] Typo I was excited about an abstract-blog-store... --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5686e96..fcd6980 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ abstract-stream-muxer > A test suite and interface you can use to implement a stream muxer. "A one stop shop for all your muxing needs" -The primary goal of this module is to enable developers to pick and swap their stream muxing module as they see fit for their application, without having to go through shims or compatibility issues. This module and test suite was heavily inspired by [abstract-blog-store](https://github.com/maxogden/abstract-blob-store). +The primary goal of this module is to enable developers to pick and swap their stream muxing module as they see fit for their application, without having to go through shims or compatibility issues. This module and test suite was heavily inspired by [abstract-blob-store](https://github.com/maxogden/abstract-blob-store). Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. From 48819a968f81e08d6e7055a70128d03cba5457a0 Mon Sep 17 00:00:00 2001 From: David Dias Date: Sat, 5 Sep 2015 21:02:33 +0100 Subject: [PATCH 028/337] Initial commit --- .gitignore | 27 +++++++++++++++++++++++++++ LICENSE | 22 ++++++++++++++++++++++ README.md | 2 ++ 3 files changed, 51 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..123ae94 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git +node_modules diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..59a33ba --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 David Dias + +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/README.md b/README.md new file mode 100644 index 0000000..bcae663 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# abstract-record-store +A test suite and interface you can use to implement a a IPRS compliant(https://github.com/ipfs/specs/tree/master/records) Record Store. From 46f9cbebaa2ce35149e2fa3b7725e8fb1e3e0001 Mon Sep 17 00:00:00 2001 From: David Dias Date: Sun, 6 Sep 2015 10:33:08 +0100 Subject: [PATCH 029/337] add badge --- README.md | 37 +++++++++++++++++++++++++++++++++++-- img/badge.png | Bin 0 -> 7315 bytes img/badge.sketch | Bin 0 -> 49152 bytes img/badge.svg | 18 ++++++++++++++++++ 4 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 img/badge.png create mode 100644 img/badge.sketch create mode 100644 img/badge.svg diff --git a/README.md b/README.md index bcae663..8ec1f4c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,35 @@ -# abstract-record-store -A test suite and interface you can use to implement a a IPRS compliant(https://github.com/ipfs/specs/tree/master/records) Record Store. +abstract-record-store +===================== + +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) + +> A test suite and interface you can use to implement a a IPRS compliant(https://github.com/ipfs/specs/tree/master/records) Record Store. + +The primary goal of this module is to enable developers to pick and swap their Record Store module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by [`abstract-blob-store`](https://github.com/maxogden/abstract-blob-store) and [`abstract-stream-muxer`](https://github.com/diasdavid/abstract-stream-muxer). + +Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. + +The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. + +# Modules that implement the interface + +- [ipfs-distributed-record-store](https://github.com/diasdavid/node-ipfs-distributed-record-store) +- [ipfs-kad-record-store](https://github.com/diasdavid/node-ipfs-kad-record-store) + +# Badge + +Include this badge in your readme if you make a module that is compatible with the abstract-record-store API. You can validate this by running the tests. + + + +# How to use the battery of tests + +## Node.js + +## Go + +> WIP + +# API + + diff --git a/img/badge.png b/img/badge.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1a460730c7332353e4ee236fa085b781a2bcd5 GIT binary patch literal 7315 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 t9wX?N-0sKTS7oWN<>nT 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 + + + badge + Created with Sketch. + + + + + Record Store + + + Compatibl + e + + + + \ No newline at end of file From 79589458c2b783d941ec020325237bcdc35e608e Mon Sep 17 00:00:00 2001 From: David Dias Date: Sun, 6 Sep 2015 12:19:07 +0100 Subject: [PATCH 030/337] add API interface and considerations --- README.md | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8ec1f4c..78fef94 100644 --- a/README.md +++ b/README.md @@ -20,16 +20,61 @@ The API is presented with both Node.js and Go primitives, however, there is not Include this badge in your readme if you make a module that is compatible with the abstract-record-store API. You can validate this by running the tests. - +![](https://raw.githubusercontent.com/diasdavid/abstract-record-store/master/img/badge.png) # How to use the battery of tests ## Node.js +``` +var tape = require('tape') +var tests = require('abstract-stream-muxer/tests') +var YourRecordStore = require('../src') + +var common = { + setup: function (t, cb) { + cb(null, YourStreamMuxer) + }, + teardown: function (t, cb) { + cb() + } +} + +tests(tape, common) +``` + ## Go > WIP # API +A valid (read: that follows this abstraction) stream muxer, must implement the following API. +### Obtain a Record + +- `Node.js` rs.get(key, function (err, records) {}) + +This method returns an array of records, found in the Record Store. + +If `err` is passed, `records` will be a `undefined` value. + +`key` is a multihash value that represents any arbitraty random value, that may have records associated with it. + +### Store a Record + +- `Node.js` rs.put(key, recordSignatureMultiHash, function (err) {}) + +`recordSignatureMultihash` is multihash of the Record Signature MerkleDAG obj, as described by IPRS - InterPlanetary Record Spec + +if `err` is passed, means that the record wasn't stored properly or it was unvalid. + +### Implementation considerations + + +- the key is a multihash but not necessarily the hash of the record signature object. +- a DRS instance must have a mapping of key->[hash(recordSignature)] to know which records belong to a given key (provided value) +- DRS implements the abstract-record-store interface +- DRS may levarage other implementations of abstract-record-store to find records in the network or other storage mechanisms +- DRS should return every valid record it can find in a query +- all unvalid records detected in the process should be discarded/deleted From 9d56ac50e15a14fd805b6387654f7d85bfb987fd Mon Sep 17 00:00:00 2001 From: David Dias Date: Sun, 6 Sep 2015 12:39:19 +0100 Subject: [PATCH 031/337] add base test setup --- README.md | 2 +- package.json | 24 ++++++++++++++++++++++++ tests/base-test.js | 15 +++++++++++++++ tests/index.js | 6 ++++++ 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 package.json create mode 100644 tests/base-test.js create mode 100644 tests/index.js diff --git a/README.md b/README.md index 78fef94..c2cb169 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ abstract-record-store ===================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) > A test suite and interface you can use to implement a a IPRS compliant(https://github.com/ipfs/specs/tree/master/records) Record Store. diff --git a/package.json b/package.json new file mode 100644 index 0000000..8f8e331 --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "abstract-record-store", + "version": "0.0.0", + "description": "A test suite and interface you can use to implement a a IPRS compliant(https://github.com/ipfs/specs/tree/master/records) Record Store", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/diasdavid/abstract-record-store.git" + }, + "keywords": [ + "IPFS" + ], + "author": "David Dias ", + "license": "MIT", + "bugs": { + "url": "https://github.com/diasdavid/abstract-record-store/issues" + }, + "homepage": "https://github.com/diasdavid/abstract-record-store", + "dependencies": { + "timed-tape": "^0.1.0" + } +} diff --git a/tests/base-test.js b/tests/base-test.js new file mode 100644 index 0000000..49ea253 --- /dev/null +++ b/tests/base-test.js @@ -0,0 +1,15 @@ +module.exports.all = function (test, common) { + + test('Store a valid record', function (t) { + common.setup(test, function (err, recordStore) { + t.ifError(err, 'Should not throw') + t.pass('woo') + }) + }) + + test('Store an unvalid record') + test('Store and retrieve a valid record') + test('Store a bunch of valid and unvalid records and check what gets retrieved') + test('Store a bunch of records with variable validity, wait for some to expire, check what gets retrieved') + +} diff --git a/tests/index.js b/tests/index.js new file mode 100644 index 0000000..b232406 --- /dev/null +++ b/tests/index.js @@ -0,0 +1,6 @@ +var timed = require('timed-tape') + +module.exports = function (test, common) { + test = timed(test) + require('./base-test.js').all(test, common) +} From c24e2852755a34b1410bba72aa836ac12a9a872a Mon Sep 17 00:00:00 2001 From: David Dias Date: Sun, 6 Sep 2015 14:26:21 +0100 Subject: [PATCH 032/337] remove muxer refs --- README.md | 4 +-- package.json | 3 ++ tests/base-test.js | 80 +++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 80 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index c2cb169..6edefc5 100644 --- a/README.md +++ b/README.md @@ -28,12 +28,12 @@ Include this badge in your readme if you make a module that is compatible with t ``` var tape = require('tape') -var tests = require('abstract-stream-muxer/tests') +var tests = require('abstract-record-store/tests') var YourRecordStore = require('../src') var common = { setup: function (t, cb) { - cb(null, YourStreamMuxer) + cb(null, YourRecordStore) }, teardown: function (t, cb) { cb() diff --git a/package.json b/package.json index 8f8e331..87a690f 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,9 @@ }, "homepage": "https://github.com/diasdavid/abstract-record-store", "dependencies": { + "ecdsa": "^0.6.0", + "ipld": "^0.1.3", + "multihashing": "^0.1.3", "timed-tape": "^0.1.0" } } diff --git a/tests/base-test.js b/tests/base-test.js index 49ea253..75ccfd9 100644 --- a/tests/base-test.js +++ b/tests/base-test.js @@ -1,15 +1,85 @@ +var crypto = require('crypto') +var multihashing = require('multihashing') +var ipld = require('ipld') +var ecdsa = require('ecdsa') + module.exports.all = function (test, common) { test('Store a valid record', function (t) { common.setup(test, function (err, recordStore) { t.ifError(err, 'Should not throw') - t.pass('woo') + + var mdagStore = recordStore.mdagStore + + var ecdh = crypto.createECDH('secp256k1') + ecdh.generateKeys() + + var mdagObj_pubKey = { + '@context': ipld.context.merkleweb, + algorithm: { + mlink: 'secp256k1' + }, + encoding: { + mlink: 'raw' + }, + bytes: ecdh.getPublicKey() + } + + var mdagObj_pubKey_encoded = ipld.marshal(mdagObj_pubKey) + var mdagObj_pubKey_mh = multihashing(mdagObj_pubKey_encoded, 'sha2-256') + mdagStore.put(mdagObj_pubKey, mdagObj_pubKey_mh) + + var current = new Date() + + var mdagObj_record = { + '@context': ipld.context.merkleweb, + scheme: { + mlink: 'type-a' + }, + expires: (new Date()).setDate(current.getDate() + 1), + value: 'aaah the data!' + } + + var mdagObj_record_encoded = ipld.marshal(mdagObj_record) + var mdagObj_record_mh = multihashing(mdagObj_record_encoded, 'sha2-256') + mdagStore.put(mdagObj_record, mdagObj_record_mh) + + var mdagObj_record_encoded_hash = crypto.createHash('sha256').update(mdagObj_record_encoded).digest() + var record_signed = ecdsa.sign(mdagObj_record_encoded_hash, ecdh.getPrivateKey()) + + var mdagObj_record_signature = { + '@context': ipld.context.merkleweb, + pubKey: { + mlink: mdagObj_pubKey_mh + }, + algorithm: { + mlink: 'secp256k1' + }, + encoding: { + mlink: 'binary' + }, + signee: { + mlink: mdagObj_record_mh + }, + bytes: record_signed + } + + var mdagObj_record_signature_encoded = ipld.marshal(mdagObj_record_signature) + var mdagObj_record_signature_encoded_mh = multihashing(mdagObj_record_signature_encoded, 'sha2-256') + + mdagStore.put(mdagObj_record_signature, mdagObj_record_signature_encoded_mh) + + recordStore.put('bananas', mdagObj_record_signature, function (err) { + t.ifError(err, 'Should not throw') + t.pass('record was stored successfully') + t.end() + }) }) }) - test('Store an unvalid record') - test('Store and retrieve a valid record') - test('Store a bunch of valid and unvalid records and check what gets retrieved') - test('Store a bunch of records with variable validity, wait for some to expire, check what gets retrieved') + // test('Store an unvalid record') + // test('Store and retrieve a valid record') + // test('Store a bunch of valid and unvalid records and check what gets retrieved') + // test('Store a bunch of records with variable validity, wait for some to expire, check what gets retrieved') } From 987474b014a853a02bd678fe92ae4fe3b34d803d Mon Sep 17 00:00:00 2001 From: David Dias Date: Sun, 6 Sep 2015 14:38:38 +0100 Subject: [PATCH 033/337] it works --- tests/base-test.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tests/base-test.js b/tests/base-test.js index 75ccfd9..ba8d22c 100644 --- a/tests/base-test.js +++ b/tests/base-test.js @@ -71,8 +71,13 @@ module.exports.all = function (test, common) { recordStore.put('bananas', mdagObj_record_signature, function (err) { t.ifError(err, 'Should not throw') - t.pass('record was stored successfully') - t.end() + recordStore.get('bananas', function (err, records) { + t.ifError(err, 'Should not throw') + t.equal(records.length, 1) + t.pass('record was stored successfully') + t.end() + }) + }) }) }) From fc1e4d7c877c24e4cb809eba0d776c39b075dd91 Mon Sep 17 00:00:00 2001 From: David Dias Date: Sun, 6 Sep 2015 14:38:47 +0100 Subject: [PATCH 034/337] Release v0.1.0. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 87a690f..09fd44f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abstract-record-store", - "version": "0.0.0", + "version": "0.1.0", "description": "A test suite and interface you can use to implement a a IPRS compliant(https://github.com/ipfs/specs/tree/master/records) Record Store", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" From 690b11999a790c98994ddd506cb4c2bc0bbc9724 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 14 Sep 2015 08:54:37 +0100 Subject: [PATCH 035/337] Initial commit --- .gitignore | 27 +++++++++++++++++++++++++++ LICENSE | 22 ++++++++++++++++++++++ README.md | 2 ++ 3 files changed, 51 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..123ae94 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git +node_modules diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..59a33ba --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 David Dias + +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/README.md b/README.md new file mode 100644 index 0000000..c2b5110 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# abstract-transport +A test suite and interface you can use to implement a transport interface. From c60cc2f55244690a93770068b109da50b1e9319c Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 14 Sep 2015 08:55:07 +0100 Subject: [PATCH 036/337] Initial commit --- .gitignore | 27 +++++++++++++++++++++++++++ LICENSE | 22 ++++++++++++++++++++++ README.md | 2 ++ 3 files changed, 51 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..123ae94 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git +node_modules diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..59a33ba --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 David Dias + +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/README.md b/README.md new file mode 100644 index 0000000..132222e --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# abstract-socket +A test suite and interface you can use to implement a socket. From 79532e01c6270e655a3ded41112f32f14b9b4a0e Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 14 Sep 2015 11:19:22 +0100 Subject: [PATCH 037/337] update dependencies to work with nodev4 --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 09fd44f..2b0d9db 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "keywords": [ "IPFS" ], + "engines" : { "node" : "^4.0.0" }, "author": "David Dias ", "license": "MIT", "bugs": { @@ -20,7 +21,7 @@ "homepage": "https://github.com/diasdavid/abstract-record-store", "dependencies": { "ecdsa": "^0.6.0", - "ipld": "^0.1.3", + "ipld": "^0.2.0", "multihashing": "^0.1.3", "timed-tape": "^0.1.0" } From 4a9eabb29320b6e52ec5a9b04b51a09c5a508e65 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 14 Sep 2015 11:20:19 +0100 Subject: [PATCH 038/337] Release v0.1.1. --- package.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 2b0d9db..3e3df62 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abstract-record-store", - "version": "0.1.0", + "version": "0.1.1", "description": "A test suite and interface you can use to implement a a IPRS compliant(https://github.com/ipfs/specs/tree/master/records) Record Store", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" @@ -12,7 +12,9 @@ "keywords": [ "IPFS" ], - "engines" : { "node" : "^4.0.0" }, + "engines": { + "node": "^4.0.0" + }, "author": "David Dias ", "license": "MIT", "bugs": { From 549395cd56afb7fb4b5de1c227af1642114c10c1 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 15 Sep 2015 15:06:42 +0100 Subject: [PATCH 039/337] add badge --- img/badge.png | Bin 0 -> 5258 bytes img/badge.sketch | Bin 0 -> 65536 bytes img/badge.svg | 19 +++++++++++++++++++ 3 files changed, 19 insertions(+) create mode 100644 img/badge.png create mode 100644 img/badge.sketch create mode 100644 img/badge.svg diff --git a/img/badge.png b/img/badge.png new file mode 100644 index 0000000000000000000000000000000000000000..a79ca44967796cd1569661767d3bfbe09a1ad512 GIT binary patch literal 5258 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 literal 0 HcmV?d00001 diff --git a/img/badge.svg b/img/badge.svg new file mode 100644 index 0000000..a240ced --- /dev/null +++ b/img/badge.svg @@ -0,0 +1,19 @@ + + + + badge + Created with Sketch. + + + + + + Connectio + n + + + Compatibl + e + + + \ No newline at end of file From c255edbca36f3ae901984e5a610a53b9b9e963e1 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 15 Sep 2015 16:50:58 +0100 Subject: [PATCH 040/337] readme till API --- README.md | 58 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 25 ++++++++++++++++++++ tests/base-test.js | 9 +++++++ tests/index.js | 6 +++++ 4 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 package.json create mode 100644 tests/base-test.js create mode 100644 tests/index.js diff --git a/README.md b/README.md index 132222e..43f8dcf 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,56 @@ -# abstract-socket -A test suite and interface you can use to implement a socket. +abstract-connection +=================== + +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) + +> A test suite and interface you can use to implement a connection. A connection is understood as something that offers a dial+listen interface + +The primary goal of this module is to enable developers to pick and swap their Record Store module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by abstract-blob-store and abstract-stream-muxer. + +Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. + +The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. + + +# Modules that implement the interface + +- [node-libp2p-tcp](https://github.com/diasdavid/node-libp2p-tcp) + +# Badge + +Include this badge in your readme if you make a module that is compatible with the abstract-connection API. You can validate this by running the tests. + +![](https://raw.githubusercontent.com/diasdavid/abstract-connection/master/img/badge.svg) + +# How to use the battery of tests + +## Node.js + +``` +var tape = require('tape') +var tests = require('abstract-connection/tests') +var YourConnectionHandler = require('../src') + +var common = { + setup: function (t, cb) { + cb(null, YourConnectionHandler) + }, + teardown: function (t, cb) { + cb() + } +} + +tests(tape, common) +``` + +## Go + +> WIP + +# API + +A valid (read: that follows this abstraction) connection, must implement the following API. + +note: a `stream` should be a stream that implements the [abstract-stream](https://github.com/diasdavid/abstract-stream) interface. + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..5455457 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "abstract-connection", + "version": "0.0.0", + "description": "A test suite and interface you can use to implement a connection.", + "main": "index.js", + "directories": { + "test": "tests" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/diasdavid/abstract-connection.git" + }, + "keywords": [ + "IPFS" + ], + "author": "David Dias ", + "license": "MIT", + "bugs": { + "url": "https://github.com/diasdavid/abstract-connection/issues" + }, + "homepage": "https://github.com/diasdavid/abstract-connection" +} diff --git a/tests/base-test.js b/tests/base-test.js new file mode 100644 index 0000000..8d5f5c2 --- /dev/null +++ b/tests/base-test.js @@ -0,0 +1,9 @@ +module.exports.all = function (test, common) { + test('a test', function (t) { + common.setup(test, function (err, Connection) { + t.ifError(err) + t.pass('woot!') + t.end() + }) + }) +} diff --git a/tests/index.js b/tests/index.js new file mode 100644 index 0000000..b232406 --- /dev/null +++ b/tests/index.js @@ -0,0 +1,6 @@ +var timed = require('timed-tape') + +module.exports = function (test, common) { + test = timed(test) + require('./base-test.js').all(test, common) +} From a9164f0ca43bcef746287dc8f3388fca81b7118f Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 15 Sep 2015 16:51:41 +0100 Subject: [PATCH 041/337] fix badge link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 43f8dcf..966e08e 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ The API is presented with both Node.js and Go primitives, however, there is not Include this badge in your readme if you make a module that is compatible with the abstract-connection API. You can validate this by running the tests. -![](https://raw.githubusercontent.com/diasdavid/abstract-connection/master/img/badge.svg) +![](https://raw.githubusercontent.com/diasdavid/abstract-connection/master/img/badge.png) # How to use the battery of tests From 225ec3cf557f4effb8e7172fc84789a337a255cb Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 15 Sep 2015 18:23:09 +0100 Subject: [PATCH 042/337] add interface --- README.md | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 966e08e..9fcef64 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,12 @@ Publishing a test suite as a module lets multiple modules all ensure compatibili The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. - # Modules that implement the interface - [node-libp2p-tcp](https://github.com/diasdavid/node-libp2p-tcp) +note: for any new given implementation that adds one more option to the multiaddr space that was not expected yet, the respective multiaddr should be added to the PeerInfo objects available on the tests, so that implementation can be properly tested. + # Badge Include this badge in your readme if you make a module that is compatible with the abstract-connection API. You can validate this by running the tests. @@ -51,6 +52,24 @@ tests(tape, common) A valid (read: that follows this abstraction) connection, must implement the following API. -note: a `stream` should be a stream that implements the [abstract-stream](https://github.com/diasdavid/abstract-stream) interface. +### Dialing to another Peer +- `Node.js` stream = conn.dial(peerInfo, []) +This method dials a connection to the Peer referenced by the peerInfo object. + +peerInfo must be of the type `PeerInfo`. + +stream must be a stream that implements the [abstract-stream](https://github.com/diasdavid/abstract-stream) interface. + +[] are not mandatory fields for all the implementations that might be passed for certain implementations for them to work (e.g. a Signalling Server for a WebRTC transport/connection implementation) + +### Listening for incoming connections from other Peers + +- `Node.js` conn.listen(options, function (stream) {}) + +This method waits and listens for incoming connections by other peers. + +stream must be a stream that implements the [abstract-stream](https://github.com/diasdavid/abstract-stream) interface. + +Options are the properties this listener must have access in order to properly listen on a given transport/socket From f1f7d9b5ce4b2c9757cabf9e2f3fe0af6c2adec1 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 15 Sep 2015 19:36:44 +0100 Subject: [PATCH 043/337] spec update --- README.md | 29 +++++++++++++++++++++++------ tests/base-test.js | 4 ++++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 9fcef64..1d20d38 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ The primary goal of this module is to enable developers to pick and swap their R Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. +The purpose of this abstraction is not to reinvent any wheels when it comes to dialing and listening to connections, instead, it tries to uniform several transports through a shimmed interface. + The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. # Modules that implement the interface @@ -54,22 +56,37 @@ A valid (read: that follows this abstraction) connection, must implement the fol ### Dialing to another Peer -- `Node.js` stream = conn.dial(peerInfo, []) +- `Node.js` var stream = conn.dial(multiaddr, [options]) This method dials a connection to the Peer referenced by the peerInfo object. -peerInfo must be of the type `PeerInfo`. +multiaddr must be of the type [`multiaddr`](http://npmjs.org/multiaddr). -stream must be a stream that implements the [abstract-stream](https://github.com/diasdavid/abstract-stream) interface. +`stream` must implements the [abstract-stream](https://github.com/diasdavid/abstract-stream) interface. -[] are not mandatory fields for all the implementations that might be passed for certain implementations for them to work (e.g. a Signalling Server for a WebRTC transport/connection implementation) +`[options]` are not mandatory fields for all the implementations that might be passed for certain implementations for them to work (e.g. a Signalling Server for a WebRTC transport/connection implementation) ### Listening for incoming connections from other Peers -- `Node.js` conn.listen(options, function (stream) {}) +- `Node.js` var listener = conn.createListener(options, function (stream) {}) This method waits and listens for incoming connections by other peers. -stream must be a stream that implements the [abstract-stream](https://github.com/diasdavid/abstract-stream) interface. +`stream` must be a stream that implements the [abstract-stream](https://github.com/diasdavid/abstract-stream) interface. Options are the properties this listener must have access in order to properly listen on a given transport/socket + +### Start listening + +- `Node.js` listener.listen(options, [callback]) + +This method opens the listener to start listening for incoming connections + +### Close an active listener + +- `Node.js` listener.close([callback]) + +This method closes the listener so that no more connections can be open + +`callback` is function that gets called when the listener is closed. It is optional + diff --git a/tests/base-test.js b/tests/base-test.js index 8d5f5c2..e0f2b15 100644 --- a/tests/base-test.js +++ b/tests/base-test.js @@ -6,4 +6,8 @@ module.exports.all = function (test, common) { t.end() }) }) + + // test for: + // 1. dial and listen + // 2. close } From e79d664d242486c9c06134cf5c92c57f4701830a Mon Sep 17 00:00:00 2001 From: David Dias Date: Wed, 16 Sep 2015 11:52:42 +0100 Subject: [PATCH 044/337] simple, gets it done --- README.md | 4 ++-- package.json | 8 +++++++- tests/base-test.js | 32 +++++++++++++++++++++++++------- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 1d20d38..9a2176f 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ This method dials a connection to the Peer referenced by the peerInfo object. multiaddr must be of the type [`multiaddr`](http://npmjs.org/multiaddr). -`stream` must implements the [abstract-stream](https://github.com/diasdavid/abstract-stream) interface. +`stream` must implements the [abstract-transport](https://github.com/diasdavid/abstract-transport) interface. `[options]` are not mandatory fields for all the implementations that might be passed for certain implementations for them to work (e.g. a Signalling Server for a WebRTC transport/connection implementation) @@ -72,7 +72,7 @@ multiaddr must be of the type [`multiaddr`](http://npmjs.org/multiaddr). This method waits and listens for incoming connections by other peers. -`stream` must be a stream that implements the [abstract-stream](https://github.com/diasdavid/abstract-stream) interface. +`stream` must be a stream that implements the [abstract-transport](https://github.com/diasdavid/abstract-transport) interface. Options are the properties this listener must have access in order to properly listen on a given transport/socket diff --git a/package.json b/package.json index 5455457..9ac97c0 100644 --- a/package.json +++ b/package.json @@ -21,5 +21,11 @@ "bugs": { "url": "https://github.com/diasdavid/abstract-connection/issues" }, - "homepage": "https://github.com/diasdavid/abstract-connection" + "homepage": "https://github.com/diasdavid/abstract-connection", + "devDependencies": { + }, + "dependencies": { + "multiaddr": "^1.0.0", + "timed-tape": "^0.1.0" + } } diff --git a/tests/base-test.js b/tests/base-test.js index e0f2b15..e136ef0 100644 --- a/tests/base-test.js +++ b/tests/base-test.js @@ -1,13 +1,31 @@ +var multiaddr = require('multiaddr') + module.exports.all = function (test, common) { test('a test', function (t) { - common.setup(test, function (err, Connection) { + common.setup(test, function (err, conn) { + t.plan(5) t.ifError(err) - t.pass('woot!') - t.end() + + var maddr = multiaddr('/ip4/127.0.0.1/tcp/9050') + + var listener = conn.createListener(function (stream) { + t.pass('received incoming connection') + stream.end() + listener.close(function () { + t.pass('listener closed successfully') + t.end() + }) + }) + + listener.listen(maddr.nodeAddress().port, function () { + t.pass('started listening') + var stream = conn.dial(maddr, { + ready: function () { + t.pass('dialed successfuly') + stream.end() + } + }) + }) }) }) - - // test for: - // 1. dial and listen - // 2. close } From cb6642e678b4a9cf65b079945a9df4870c0e6dbe Mon Sep 17 00:00:00 2001 From: David Dias Date: Wed, 16 Sep 2015 11:55:33 +0100 Subject: [PATCH 045/337] clean package.json --- package.json | 7 ------- 1 file changed, 7 deletions(-) diff --git a/package.json b/package.json index 9ac97c0..b7d9418 100644 --- a/package.json +++ b/package.json @@ -2,13 +2,6 @@ "name": "abstract-connection", "version": "0.0.0", "description": "A test suite and interface you can use to implement a connection.", - "main": "index.js", - "directories": { - "test": "tests" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, "repository": { "type": "git", "url": "https://github.com/diasdavid/abstract-connection.git" From 4a571f1ac1bfa94af52a196b1b4660d7315a2cf3 Mon Sep 17 00:00:00 2001 From: David Dias Date: Wed, 16 Sep 2015 11:55:44 +0100 Subject: [PATCH 046/337] Release v0.1.0. --- package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index b7d9418..70ef40e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abstract-connection", - "version": "0.0.0", + "version": "0.1.0", "description": "A test suite and interface you can use to implement a connection.", "repository": { "type": "git", @@ -15,8 +15,7 @@ "url": "https://github.com/diasdavid/abstract-connection/issues" }, "homepage": "https://github.com/diasdavid/abstract-connection", - "devDependencies": { - }, + "devDependencies": {}, "dependencies": { "multiaddr": "^1.0.0", "timed-tape": "^0.1.0" From a422c81b90e60c25574ebf45bd30f3a57059757b Mon Sep 17 00:00:00 2001 From: David Dias Date: Wed, 16 Sep 2015 16:21:35 +0100 Subject: [PATCH 047/337] add logo --- img/badge.png | Bin 0 -> 5226 bytes img/badge.sketch | Bin 0 -> 40960 bytes img/badge.svg | 19 +++++++++++++++++++ 3 files changed, 19 insertions(+) create mode 100644 img/badge.png create mode 100644 img/badge.sketch create mode 100644 img/badge.svg diff --git a/img/badge.png b/img/badge.png new file mode 100644 index 0000000000000000000000000000000000000000..1c8fe6972b5957adcd6088961701fda1ff5cf368 GIT binary patch literal 5226 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 literal 0 HcmV?d00001 diff --git a/img/badge.svg b/img/badge.svg new file mode 100644 index 0000000..aa56dac --- /dev/null +++ b/img/badge.svg @@ -0,0 +1,19 @@ + + + + badge + Created with Sketch. + + + + + + Transpor + t + + + Compatibl + e + + + \ No newline at end of file From e1b7badc2d41defde1ead8d7497d6ca32a1ebfe4 Mon Sep 17 00:00:00 2001 From: David Dias Date: Wed, 16 Sep 2015 17:32:10 +0100 Subject: [PATCH 048/337] landing --- README.md | 63 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 18 +++++++++++++ tests/base-test.js | 8 ++++++ tests/index.js | 6 +++++ 4 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 package.json create mode 100644 tests/base-test.js create mode 100644 tests/index.js diff --git a/README.md b/README.md index c2b5110..3140d22 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,61 @@ -# abstract-transport -A test suite and interface you can use to implement a transport interface. +abstract-transport +================== + +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) + +> A test suite and interface you can use to implement a transport. A transport is understood as something that offers mechanism for writing and reading data, back pressure, half and full duplex streams. This module and test suite were heavily inspired by abstract-blob-store and abstract-stream-muxer. + +The primary goal of module is to enable developers to pick, swap or upgrade their transport without loosing the same API expectations and mechanisms such as back pressure and the hability to half close a stream. + +Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. + +The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. + +> **IMPORTANT** - Tests are still not finished nor the interface + + +# Modules that implement the interface + +- [node-libp2p-tcp](https://github.com/diasdavid/node-libp2p-tcp) + +# Badge + +Include this badge in your readme if you make a module that is compatible with the abstract-connection API. You can validate this by running the tests. + +![](https://raw.githubusercontent.com/diasdavid/abstract-transport/master/img/badge.png) + +# How to use the battery of tests + +## Node.js + +``` +var tape = require('tape') +var tests = require('abstract-transport/tests') +var YourTransportHandler = require('../src') + +var common = { + setup: function (t, cb) { + cb(null, YourTransportHandler) + }, + teardown: function (t, cb) { + cb() + } +} + +tests(tape, common) +``` + +## Go + +> WIP + +# API + +A valid (read: that follows this abstraction) connection, must implement the following API. + +notes: + - should have backpressure into account + - should enable half duplex streams (close from one side, but still open for the other) + - should support full duplex + - tests should be performed by passing two streams + diff --git a/package.json b/package.json new file mode 100644 index 0000000..2705582 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "abstract-transport", + "version": "0.0.0", + "description": "A test suite and interface you can use to implement a transport interface.", + "repository": { + "type": "git", + "url": "https://github.com/diasdavid/abstract-transport.git" + }, + "keywords": [ + "IPFS" + ], + "author": "David Dias ", + "license": "MIT", + "bugs": { + "url": "https://github.com/diasdavid/abstract-transport/issues" + }, + "homepage": "https://github.com/diasdavid/abstract-transport" +} diff --git a/tests/base-test.js b/tests/base-test.js new file mode 100644 index 0000000..4d42a06 --- /dev/null +++ b/tests/base-test.js @@ -0,0 +1,8 @@ +module.exports.all = function (test, common) { + test('a test', function (t) { + common.setup(test, function (err, conn) { + t.ifError(err) + t.end() + }) + }) +} diff --git a/tests/index.js b/tests/index.js new file mode 100644 index 0000000..b232406 --- /dev/null +++ b/tests/index.js @@ -0,0 +1,6 @@ +var timed = require('timed-tape') + +module.exports = function (test, common) { + test = timed(test) + require('./base-test.js').all(test, common) +} From 3b0a98ccf0dcfb0043ec40cd7c4366a8536f7f2b Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 17 Sep 2015 02:44:07 +0100 Subject: [PATCH 049/337] rename, following https://github.com/diasdavid/node-ipfs-swarm/issues/8#issuecomment-140929746 --- README.md | 14 +++++++------- img/badge.png | Bin 5226 -> 5258 bytes img/badge.sketch | Bin 40960 -> 65536 bytes img/badge.svg | 8 ++++---- package.json | 10 +++++----- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 3140d22..a35cbe4 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ -abstract-transport +abstract-connection ================== [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) -> A test suite and interface you can use to implement a transport. A transport is understood as something that offers mechanism for writing and reading data, back pressure, half and full duplex streams. This module and test suite were heavily inspired by abstract-blob-store and abstract-stream-muxer. +> A test suite and interface you can use to implement a connection. A connection is understood as something that offers mechanism for writing and reading data, back pressure, half and full duplex streams. This module and test suite were heavily inspired by abstract-blob-store and abstract-stream-muxer. -The primary goal of module is to enable developers to pick, swap or upgrade their transport without loosing the same API expectations and mechanisms such as back pressure and the hability to half close a stream. +The primary goal of module is to enable developers to pick, swap or upgrade their connection without loosing the same API expectations and mechanisms such as back pressure and the hability to half close a connection. Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. @@ -22,7 +22,7 @@ The API is presented with both Node.js and Go primitives, however, there is not Include this badge in your readme if you make a module that is compatible with the abstract-connection API. You can validate this by running the tests. -![](https://raw.githubusercontent.com/diasdavid/abstract-transport/master/img/badge.png) +![](https://raw.githubusercontent.com/diasdavid/abstract-connection/master/img/badge.png) # How to use the battery of tests @@ -30,12 +30,12 @@ Include this badge in your readme if you make a module that is compatible with t ``` var tape = require('tape') -var tests = require('abstract-transport/tests') -var YourTransportHandler = require('../src') +var tests = require('abstract-connection/tests') +var YourConnectionHandler = require('../src') var common = { setup: function (t, cb) { - cb(null, YourTransportHandler) + cb(null, YourConnectionHandler) }, teardown: function (t, cb) { cb() diff --git a/img/badge.png b/img/badge.png index 1c8fe6972b5957adcd6088961701fda1ff5cf368..a79ca44967796cd1569661767d3bfbe09a1ad512 100644 GIT binary patch delta 5257 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 delta 12580 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 JfB6_B{2wM#je`IH diff --git a/img/badge.svg b/img/badge.svg index aa56dac..a240ced 100644 --- a/img/badge.svg +++ b/img/badge.svg @@ -6,10 +6,10 @@ - - - Transpor - t + + + Connectio + n Compatibl diff --git a/package.json b/package.json index 2705582..67d24e9 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { - "name": "abstract-transport", + "name": "abstract-connection", "version": "0.0.0", - "description": "A test suite and interface you can use to implement a transport interface.", + "description": "A test suite and interface you can use to implement a connection interface.", "repository": { "type": "git", - "url": "https://github.com/diasdavid/abstract-transport.git" + "url": "https://github.com/diasdavid/abstract-connection.git" }, "keywords": [ "IPFS" @@ -12,7 +12,7 @@ "author": "David Dias ", "license": "MIT", "bugs": { - "url": "https://github.com/diasdavid/abstract-transport/issues" + "url": "https://github.com/diasdavid/abstract-connection/issues" }, - "homepage": "https://github.com/diasdavid/abstract-transport" + "homepage": "https://github.com/diasdavid/abstract-connection" } From 1a2497cebcbc9f0d36ee0f7ad419f4465b563544 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 17 Sep 2015 02:45:02 +0100 Subject: [PATCH 050/337] Release v0.0.1. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 67d24e9..b949b7a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abstract-connection", - "version": "0.0.0", + "version": "0.0.1", "description": "A test suite and interface you can use to implement a connection interface.", "repository": { "type": "git", From 97f3bf5f81330e03b641b2cf2f14613b9d96e3aa Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 17 Sep 2015 02:49:43 +0100 Subject: [PATCH 051/337] rename, following https://github.com/diasdavid/node-ipfs-swarm/issues/8#issuecomment-140929746 --- README.md | 38 +++++++++++++++++++------------------- img/badge.png | Bin 5258 -> 5226 bytes img/badge.sketch | Bin 65536 -> 40960 bytes img/badge.svg | 8 ++++---- package.json | 12 ++++++------ tests/base-test.js | 6 +++--- 6 files changed, 32 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 9a2176f..ec31bef 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ -abstract-connection +abstract-transport =================== [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) -> A test suite and interface you can use to implement a connection. A connection is understood as something that offers a dial+listen interface +> A test suite and interface you can use to implement a transport. A transport is understood as something that offers a dial+listen interface The primary goal of this module is to enable developers to pick and swap their Record Store module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by abstract-blob-store and abstract-stream-muxer. Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. -The purpose of this abstraction is not to reinvent any wheels when it comes to dialing and listening to connections, instead, it tries to uniform several transports through a shimmed interface. +The purpose of this abstraction is not to reinvent any wheels when it comes to dialing and listening to transports, instead, it tries to uniform several transports through a shimmed interface. The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. @@ -21,9 +21,9 @@ note: for any new given implementation that adds one more option to the multiadd # Badge -Include this badge in your readme if you make a module that is compatible with the abstract-connection API. You can validate this by running the tests. +Include this badge in your readme if you make a module that is compatible with the abstract-transport API. You can validate this by running the tests. -![](https://raw.githubusercontent.com/diasdavid/abstract-connection/master/img/badge.png) +![](https://raw.githubusercontent.com/diasdavid/abstract-transport/master/img/badge.png) # How to use the battery of tests @@ -31,12 +31,12 @@ Include this badge in your readme if you make a module that is compatible with t ``` var tape = require('tape') -var tests = require('abstract-connection/tests') -var YourConnectionHandler = require('../src') +var tests = require('abstract-transport/tests') +var YourTransportHandler = require('../src') var common = { setup: function (t, cb) { - cb(null, YourConnectionHandler) + cb(null, YourTransportHandler) }, teardown: function (t, cb) { cb() @@ -52,27 +52,27 @@ tests(tape, common) # API -A valid (read: that follows this abstraction) connection, must implement the following API. +A valid (read: that follows this abstraction) transport, must implement the following API. ### Dialing to another Peer -- `Node.js` var stream = conn.dial(multiaddr, [options]) +- `Node.js` var stream = transport.dial(multiaddr, [options]) -This method dials a connection to the Peer referenced by the peerInfo object. +This method dials a transport to the Peer referenced by the peerInfo object. multiaddr must be of the type [`multiaddr`](http://npmjs.org/multiaddr). -`stream` must implements the [abstract-transport](https://github.com/diasdavid/abstract-transport) interface. +`stream` must implements the [abstract-connection](https://github.com/diasdavid/abstract-connection) interface. -`[options]` are not mandatory fields for all the implementations that might be passed for certain implementations for them to work (e.g. a Signalling Server for a WebRTC transport/connection implementation) +`[options]` are not mandatory fields for all the implementations that might be passed for certain implementations for them to work (e.g. a Signalling Server for a WebRTC transport implementation) -### Listening for incoming connections from other Peers +### Listening for incoming transports from other Peers -- `Node.js` var listener = conn.createListener(options, function (stream) {}) +- `Node.js` var listener = transport.createListener(options, function (stream) {}) -This method waits and listens for incoming connections by other peers. +This method waits and listens for incoming transports by other peers. -`stream` must be a stream that implements the [abstract-transport](https://github.com/diasdavid/abstract-transport) interface. +`stream` must be a stream that implements the [abstract-connection](https://github.com/diasdavid/abstract-connection) interface. Options are the properties this listener must have access in order to properly listen on a given transport/socket @@ -80,13 +80,13 @@ Options are the properties this listener must have access in order to properly l - `Node.js` listener.listen(options, [callback]) -This method opens the listener to start listening for incoming connections +This method opens the listener to start listening for incoming transports ### Close an active listener - `Node.js` listener.close([callback]) -This method closes the listener so that no more connections can be open +This method closes the listener so that no more connections can be open on this transport instance `callback` is function that gets called when the listener is closed. It is optional diff --git a/img/badge.png b/img/badge.png index a79ca44967796cd1569661767d3bfbe09a1ad512..1c8fe6972b5957adcd6088961701fda1ff5cf368 100644 GIT binary patch delta 5224 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 JfB6_B{2wM#je`IH literal 65536 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 diff --git a/img/badge.svg b/img/badge.svg index a240ced..aa56dac 100644 --- a/img/badge.svg +++ b/img/badge.svg @@ -6,10 +6,10 @@ - - - Connectio - n + + + Transpor + t Compatibl diff --git a/package.json b/package.json index 70ef40e..f8c2d11 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { - "name": "abstract-connection", - "version": "0.1.0", - "description": "A test suite and interface you can use to implement a connection.", + "name": "abstract-transport", + "version": "0.0.0", + "description": "A test suite and interface you can use to implement a transport.", "repository": { "type": "git", - "url": "https://github.com/diasdavid/abstract-connection.git" + "url": "https://github.com/diasdavid/abstract-transport.git" }, "keywords": [ "IPFS" @@ -12,9 +12,9 @@ "author": "David Dias ", "license": "MIT", "bugs": { - "url": "https://github.com/diasdavid/abstract-connection/issues" + "url": "https://github.com/diasdavid/abstract-transport/issues" }, - "homepage": "https://github.com/diasdavid/abstract-connection", + "homepage": "https://github.com/diasdavid/abstract-transport", "devDependencies": {}, "dependencies": { "multiaddr": "^1.0.0", diff --git a/tests/base-test.js b/tests/base-test.js index e136ef0..bd67f93 100644 --- a/tests/base-test.js +++ b/tests/base-test.js @@ -2,13 +2,13 @@ var multiaddr = require('multiaddr') module.exports.all = function (test, common) { test('a test', function (t) { - common.setup(test, function (err, conn) { + common.setup(test, function (err, transport) { t.plan(5) t.ifError(err) var maddr = multiaddr('/ip4/127.0.0.1/tcp/9050') - var listener = conn.createListener(function (stream) { + var listener = transport.createListener(function (stream) { t.pass('received incoming connection') stream.end() listener.close(function () { @@ -19,7 +19,7 @@ module.exports.all = function (test, common) { listener.listen(maddr.nodeAddress().port, function () { t.pass('started listening') - var stream = conn.dial(maddr, { + var stream = transport.dial(maddr, { ready: function () { t.pass('dialed successfuly') stream.end() From c48504ecbd8c6c93688cfe4cbbb5962b30e2c392 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 17 Sep 2015 02:51:47 +0100 Subject: [PATCH 052/337] Release v0.1.0. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f8c2d11..e2c0cd8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abstract-transport", - "version": "0.0.0", + "version": "0.1.0", "description": "A test suite and interface you can use to implement a transport.", "repository": { "type": "git", From 574827d61fb0e6e302393ea79a9156985be312a6 Mon Sep 17 00:00:00 2001 From: David Dias Date: Sat, 19 Sep 2015 09:22:54 +0100 Subject: [PATCH 053/337] Initial commit --- .gitignore | 27 +++++++++++++++++++++++++++ LICENSE | 22 ++++++++++++++++++++++ README.md | 2 ++ 3 files changed, 51 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..123ae94 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git +node_modules diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..59a33ba --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 David Dias + +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/README.md b/README.md new file mode 100644 index 0000000..25518e9 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# abstract-peer-routing +A test suite and interface you can use to implement a Peer Routing for libp2p. From 897e72ca14f0a13713b828675cee7eb2d05eea02 Mon Sep 17 00:00:00 2001 From: David Dias Date: Sat, 19 Sep 2015 16:18:26 +0100 Subject: [PATCH 054/337] add badge --- img/badge.png | Bin 0 -> 7070 bytes img/badge.sketch | Bin 0 -> 139264 bytes img/badge.svg | 19 +++++++++++++++++++ 3 files changed, 19 insertions(+) create mode 100644 img/badge.png create mode 100644 img/badge.sketch create mode 100644 img/badge.svg diff --git a/img/badge.png b/img/badge.png new file mode 100644 index 0000000000000000000000000000000000000000..44127db9ee0a1786675bc5f85fb4f94d247ea118 GIT binary patch literal 7070 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 S4jaEosZHNM{jWoE?7sjWaGS0G literal 0 HcmV?d00001 diff --git a/img/badge.svg b/img/badge.svg new file mode 100644 index 0000000..8ecfc6d --- /dev/null +++ b/img/badge.svg @@ -0,0 +1,39 @@ + + + + badge + Created with Sketch. + + + + + + + + + + + + Peer Discovery + + + Compatibl + e + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..28acfea --- /dev/null +++ b/package.json @@ -0,0 +1,42 @@ +{ + "name": "interface-discovery", + "version": "0.0.0", + "description": "A test suite and interface you can use to implement a discovery interface.", + "main": "src/index.js", + "scripts": { + "lint": "aegir-lint", + "build": "aegir-build", + "test": "exit 0", + "release": "aegir-release", + "release-minor": "aegir-release --type minor", + "release-major": "aegir-release --type major" + }, + "pre-commit": [ + "lint", + "test" + ], + "repository": { + "type": "git", + "url": "https://github.com/libp2p/interface-peer-discovery.git" + }, + "keywords": [ + "IPFS" + ], + "author": "David Dias ", + "license": "MIT", + "bugs": { + "url": "https://github.com/libp2p/interface-peer-discovery/issues" + }, + "homepage": "https://github.com/libp2p/interface-peer-discovery", + "dependencies": { + }, + "devDependencies": { + "aegir": "^9.4.0" + }, + "engines": { + "node": ">=4.0.0", + "npm": ">=3.0.0" + }, + "contributors": [ + ] +} diff --git a/test/index.js b/test/index.js new file mode 100644 index 0000000..ccacec3 --- /dev/null +++ b/test/index.js @@ -0,0 +1 @@ +'use strict' From 7e9636cb002e2e9d02b57d21c4a0793136fefa36 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 7 Feb 2017 18:45:27 +0100 Subject: [PATCH 190/337] chore(package): update aegir to version 10.0.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a0211fd..b5560dd 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "pull-stream": "^3.5.0" }, "devDependencies": { - "aegir": "^9.3.1" + "aegir": "^10.0.0" }, "contributors": [ "David Dias ", From 5cb8c44b95cae1c5289afcd11af7f10cec32ffb0 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 7 Feb 2017 18:45:39 +0100 Subject: [PATCH 191/337] chore(package): update aegir to version 10.0.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 76e9214..0bea438 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/diasdavid/interface-transport", "devDependencies": { - "aegir": "^9.2.1" + "aegir": "^10.0.0" }, "dependencies": { "chai": "^3.5.0", From ce49e3b466acf4ca7a2ac42ff010ea921e6f04df Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 9 Feb 2017 08:50:06 -0800 Subject: [PATCH 192/337] chore: ^ to ~ --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index a0211fd..f7482d0 100644 --- a/package.json +++ b/package.json @@ -36,14 +36,14 @@ "chai": "^3.5.0", "chai-checkmark": "^1.0.1", "detect-node": "^2.0.3", - "libp2p-tcp": "^0.9.1", - "multiaddr": "^2.1.3", + "libp2p-tcp": "~0.9.2", + "multiaddr": "^2.2.1", "pull-generate": "^2.2.0", "pull-pair": "^1.1.0", "pull-stream": "^3.5.0" }, "devDependencies": { - "aegir": "^9.3.1" + "aegir": "^10.0.0" }, "contributors": [ "David Dias ", @@ -53,4 +53,4 @@ "Victor Bjelkholm ", "greenkeeperio-bot " ] -} \ No newline at end of file +} From aa675b26f0b99e9c627e0d6ba6134487c23f4ed6 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 9 Feb 2017 08:50:16 -0800 Subject: [PATCH 193/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f7482d0..6a24fd1 100644 --- a/package.json +++ b/package.json @@ -53,4 +53,4 @@ "Victor Bjelkholm ", "greenkeeperio-bot " ] -} +} \ No newline at end of file From e82292b708ed4bff3556452f33c2dc11675f1b69 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 9 Feb 2017 08:50:17 -0800 Subject: [PATCH 194/337] chore: release version v0.5.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6a24fd1..c4ad33d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.5.5", + "version": "0.5.6", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "browser": { From 9bea979b085b4a4f2f13996d4db618c0c78e2246 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 9 Feb 2017 08:50:57 -0800 Subject: [PATCH 195/337] chore: ^ to ~ --- package.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 99f0fba..f0f67c3 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/diasdavid/interface-record-store.git" + "url": "https://github.com/libp2p/interface-record-store.git" }, "keywords": [ "IPFS" @@ -18,13 +18,13 @@ "author": "David Dias ", "license": "MIT", "bugs": { - "url": "https://github.com/diasdavid/interface-record-store/issues" + "url": "https://github.com/libp2p/interface-record-store/issues" }, - "homepage": "https://github.com/diasdavid/interface-record-store", + "homepage": "https://github.com/libp2p/interface-record-store", "dependencies": { - "ecdsa": "^0.7.0", - "ipld": "^0.6.0", - "multihashing": "^0.2.1", - "timed-tape": "^0.1.0" + "ecdsa": "~0.7.0", + "ipld": "~0.6.0", + "multihashing": "~0.2.2", + "timed-tape": "~0.1.1" } } From 6b2fb8322f3779207b8e1af30e4cf23a8d9bb024 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 9 Feb 2017 08:51:30 -0800 Subject: [PATCH 196/337] chore: ^ to ~ --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 94e0075..35b349c 100644 --- a/package.json +++ b/package.json @@ -29,11 +29,11 @@ }, "homepage": "https://github.com/libp2p/interface-connection", "dependencies": { - "timed-tape": "^0.1.1", - "pull-defer": "^0.2.2" + "timed-tape": "~0.1.1", + "pull-defer": "~0.2.2" }, "devDependencies": { - "aegir": "^9.2.1" + "aegir": "^10.0.0" }, "engines": { "node": ">=4.0.0" @@ -45,4 +45,4 @@ "Richard Littauer ", "greenkeeperio-bot " ] -} \ No newline at end of file +} From 030c52e121d9915956f1124439d7acc7a3266e8a Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 9 Feb 2017 08:51:38 -0800 Subject: [PATCH 197/337] chore: update contributors --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 35b349c..3043213 100644 --- a/package.json +++ b/package.json @@ -41,8 +41,8 @@ "contributors": [ "David Dias ", "Friedel Ziegelmayer ", + "Greenkeeper ", "Pau Ramon Revilla ", - "Richard Littauer ", - "greenkeeperio-bot " + "Richard Littauer " ] -} +} \ No newline at end of file From f7b996fd3c3eefb7611def8f79a83f1c2b4dc0a0 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 9 Feb 2017 08:51:38 -0800 Subject: [PATCH 198/337] chore: release version v0.3.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3043213..94054bd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.3.0", + "version": "0.3.1", "description": "A test suite and interface you can use to implement a connection interface.", "main": "src/index.js", "scripts": { From d30d54cf62cdb59f61499a2c1c11e6da9e4a1cdd Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 9 Feb 2017 08:52:46 -0800 Subject: [PATCH 199/337] chore: ^ to ~ --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 76e9214..a669709 100644 --- a/package.json +++ b/package.json @@ -32,14 +32,14 @@ }, "homepage": "https://github.com/diasdavid/interface-transport", "devDependencies": { - "aegir": "^9.2.1" + "aegir": "^10.0.0" }, "dependencies": { "chai": "^3.5.0", - "multiaddr": "^2.0.3", + "multiaddr": "^2.2.1", "pull-goodbye": "0.0.1", "pull-serializer": "^0.3.2", - "pull-stream": "^3.4.4" + "pull-stream": "^3.5.0" }, "contributors": [ "David Dias ", @@ -47,4 +47,4 @@ "Richard Littauer ", "greenkeeperio-bot " ] -} \ No newline at end of file +} From 2377b1c00bb93b2c45706dfd7fc715f1d2a83425 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 9 Feb 2017 08:52:56 -0800 Subject: [PATCH 200/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a669709..e822073 100644 --- a/package.json +++ b/package.json @@ -47,4 +47,4 @@ "Richard Littauer ", "greenkeeperio-bot " ] -} +} \ No newline at end of file From 47fa5ed823063c47cfc7e3d75ebcdcc5ae0b8a11 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 9 Feb 2017 08:52:56 -0800 Subject: [PATCH 201/337] chore: release version v0.3.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e822073..027f82b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.3.3", + "version": "0.3.4", "description": "A test suite and interface you can use to implement a transport.", "repository": { "type": "git", From 41b297a73a5cbf9a37cd656f980ad35cea1a4400 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 9 Feb 2017 08:54:25 -0800 Subject: [PATCH 202/337] chore: ^ to ~ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 27473cb..d7c0e0f 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "homepage": "https://github.com/diasdavid/interface-peer-routing", "devDependencies": {}, "dependencies": { - "peer-id": "^0.8.1", + "peer-id": "~0.8.2", "timed-tape": "^0.1.1" } } From 02f7a4fc0e07fb33febe196883836511b028c867 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 9 Feb 2017 08:55:04 -0800 Subject: [PATCH 203/337] chore: ^ to ~ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 28acfea..9ca5877 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "dependencies": { }, "devDependencies": { - "aegir": "^9.4.0" + "aegir": "^10.0.0" }, "engines": { "node": ">=4.0.0", From 8ad11e3bb25d49699e6ba9ded48a443765453fea Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 9 Feb 2017 08:56:13 -0800 Subject: [PATCH 204/337] chore: update contributors --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 9ca5877..09b3d96 100644 --- a/package.json +++ b/package.json @@ -28,8 +28,7 @@ "url": "https://github.com/libp2p/interface-peer-discovery/issues" }, "homepage": "https://github.com/libp2p/interface-peer-discovery", - "dependencies": { - }, + "dependencies": {}, "devDependencies": { "aegir": "^10.0.0" }, @@ -38,5 +37,6 @@ "npm": ">=3.0.0" }, "contributors": [ + "David Dias " ] -} +} \ No newline at end of file From 1930b29e9752436ae9501f507fe4a118cb5a2404 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 9 Feb 2017 08:56:13 -0800 Subject: [PATCH 205/337] chore: release version v0.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 09b3d96..86bcbb2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-discovery", - "version": "0.0.0", + "version": "0.0.1", "description": "A test suite and interface you can use to implement a discovery interface.", "main": "src/index.js", "scripts": { From 6eeed4cbcbc9bb0ab45b2f18f096704ec064d3b4 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 9 Feb 2017 08:56:37 -0800 Subject: [PATCH 207/337] chore: release version v0.0.2 --- .gitignore | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 5148e52..1be92c3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +dist # Logs logs *.log diff --git a/package.json b/package.json index 86bcbb2..18c2060 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-discovery", - "version": "0.0.1", + "version": "0.0.2", "description": "A test suite and interface you can use to implement a discovery interface.", "main": "src/index.js", "scripts": { From 54b83a781305bc27a3cf6f87b9fdbe607683190d Mon Sep 17 00:00:00 2001 From: dmitriy ryajov Date: Sat, 18 Feb 2017 16:55:23 -0800 Subject: [PATCH 209/337] fix: wrong main path in package.json --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 027f82b..aa3fd15 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,7 @@ "type": "git", "url": "https://github.com/diasdavid/interface-transport.git" }, - "main": "lib/index.js", - "jsnext:main": "src/index.js", + "main": "src/index.js", "scripts": { "lint": "aegir-lint", "test": "aegir-test", From b2b928b25a7d73164de2211438a98f737a47cae5 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 16 Mar 2017 15:54:23 +0100 Subject: [PATCH 210/337] chore(package): update multihashing to version 0.3.2 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f0f67c3..d8de813 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "dependencies": { "ecdsa": "~0.7.0", "ipld": "~0.6.0", - "multihashing": "~0.2.2", + "multihashing": "~0.3.2", "timed-tape": "~0.1.1" } } From b5bdcb84bb7a3df349461504886f280a0cbbd61e Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 16 Mar 2017 15:56:47 +0000 Subject: [PATCH 211/337] chore: update aegir and fix lint --- package.json | 8 ++++---- src/spawner.js | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index c4ad33d..e71f0c7 100644 --- a/package.json +++ b/package.json @@ -32,18 +32,18 @@ }, "homepage": "https://github.com/libp2p/interface-stream-muxer", "dependencies": { - "async": "^2.1.4", + "async": "^2.1.5", "chai": "^3.5.0", "chai-checkmark": "^1.0.1", "detect-node": "^2.0.3", - "libp2p-tcp": "~0.9.2", - "multiaddr": "^2.2.1", + "libp2p-tcp": "~0.9.3", + "multiaddr": "^2.2.2", "pull-generate": "^2.2.0", "pull-pair": "^1.1.0", "pull-stream": "^3.5.0" }, "devDependencies": { - "aegir": "^10.0.0" + "aegir": "^11.0.0" }, "contributors": [ "David Dias ", diff --git a/src/spawner.js b/src/spawner.js index 293111c..51a74a8 100644 --- a/src/spawner.js +++ b/src/spawner.js @@ -22,16 +22,16 @@ module.exports = (muxer, nStreams, nMsg, done, limit) => { const dialer = muxer.dialer(dialerSocket) listener.on('stream', (stream) => { - expect(stream).to.exist + expect(stream).to.exist // eslint-disable-line check() pull( stream, pull.through((chunk) => { - expect(chunk).to.exist + expect(chunk).to.exist // eslint-disable-line check() }), pull.onEnd((err) => { - expect(err).to.not.exist + expect(err).to.not.exist // eslint-disable-line check() pull(pull.empty(), stream) }) @@ -45,9 +45,9 @@ module.exports = (muxer, nStreams, nMsg, done, limit) => { const spawnStream = (n, cb) => { const stream = dialer.newStream((err) => { - expect(err).to.not.exist + expect(err).to.not.exist // eslint-disable-line check() - expect(stream).to.exist + expect(stream).to.exist // eslint-disable-line check() pull( generate(0, (s, cb) => { @@ -57,7 +57,7 @@ module.exports = (muxer, nStreams, nMsg, done, limit) => { }), stream, pull.collect((err, res) => { - expect(err).to.not.exist + expect(err).to.not.exist // eslint-disable-line check() expect(res).to.be.eql([]) check() From 28cd90b01a6463e39c83dda9ee6248dd0e07dcc5 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 16 Mar 2017 15:56:54 +0000 Subject: [PATCH 213/337] chore: release version v0.5.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e71f0c7..a078b01 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.5.6", + "version": "0.5.7", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "browser": { From 239849fe1a4f4dad624f657a39422e994da99386 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 16 Mar 2017 16:47:47 +0000 Subject: [PATCH 214/337] chore: update deps --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 94054bd..a031727 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "lint": "aegir-lint", "build": "aegir-build", "test": "exit 0", - "release": "aegir-release", + "release": "aegir-release --node", "release-minor": "aegir-release --type minor", "release-major": "aegir-release --type major" }, @@ -33,7 +33,7 @@ "pull-defer": "~0.2.2" }, "devDependencies": { - "aegir": "^10.0.0" + "aegir": "^11.0.0" }, "engines": { "node": ">=4.0.0" @@ -45,4 +45,4 @@ "Pau Ramon Revilla ", "Richard Littauer " ] -} \ No newline at end of file +} From 7cf11bef91e37b0071940da86bd0cc3fb22359c9 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 21 Mar 2017 14:08:50 +0000 Subject: [PATCH 215/337] chore: add engine --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a031727..09dee39 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.3.1", + "version": "0.3.2", "description": "A test suite and interface you can use to implement a connection interface.", "main": "src/index.js", "scripts": { @@ -36,7 +36,8 @@ "aegir": "^11.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=4.0.0", + "npm": ">=3.0.0" }, "contributors": [ "David Dias ", From 3f83a4afc7835dbd68eea8cf2d986285636a2d4e Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 21 Mar 2017 14:23:00 +0000 Subject: [PATCH 216/337] chore: update aegir --- package.json | 7 ++++--- src/dial-test.js | 9 ++++++--- src/listen-test.js | 10 +++++++--- test/transport.spec.js | 1 - 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index aa3fd15..58b0ffe 100644 --- a/package.json +++ b/package.json @@ -31,11 +31,12 @@ }, "homepage": "https://github.com/diasdavid/interface-transport", "devDependencies": { - "aegir": "^10.0.0" + "aegir": "^11.0.0", + "dirty-chai": "^1.2.2" }, "dependencies": { "chai": "^3.5.0", - "multiaddr": "^2.2.1", + "multiaddr": "^2.2.2", "pull-goodbye": "0.0.1", "pull-serializer": "^0.3.2", "pull-stream": "^3.5.0" @@ -46,4 +47,4 @@ "Richard Littauer ", "greenkeeperio-bot " ] -} \ No newline at end of file +} diff --git a/src/dial-test.js b/src/dial-test.js index 8f9d13b..85c1a6c 100644 --- a/src/dial-test.js +++ b/src/dial-test.js @@ -1,7 +1,10 @@ /* eslint-env mocha */ 'use strict' -const expect = require('chai').expect +const chai = require('chai') +const dirtyChai = require('dirty-chai') +const expect = chai.expect +chai.use(dirtyChai) const pull = require('pull-stream') const goodbye = require('pull-goodbye') const serializer = require('pull-serializer') @@ -40,7 +43,7 @@ module.exports = (common) => { const s = serializer(goodbye({ source: pull.values(['hey']), sink: pull.collect((err, values) => { - expect(err).to.not.exist + expect(err).to.not.exist() expect( values ).to.be.eql( @@ -61,7 +64,7 @@ module.exports = (common) => { pull( transport.dial(addrs[1]), pull.onEnd((err) => { - expect(err).to.exist + expect(err).to.exist() done() }) ) diff --git a/src/listen-test.js b/src/listen-test.js index 5398c59..e43e393 100644 --- a/src/listen-test.js +++ b/src/listen-test.js @@ -2,7 +2,11 @@ /* eslint-env mocha */ 'use strict' -const expect = require('chai').expect +const chai = require('chai') +const dirtyChai = require('dirty-chai') +const expect = chai.expect +chai.use(dirtyChai) + const pull = require('pull-stream') module.exports = (common) => { @@ -66,7 +70,7 @@ module.exports = (common) => { const listener = transport.createListener() listener.on('connection', (conn) => { - expect(conn).to.exist + expect(conn).to.exist() finish() }) @@ -89,7 +93,7 @@ module.exports = (common) => { it.skip('error', (done) => { const listener = transport.createListener() listener.on('error', (err) => { - expect(err).to.exist + expect(err).to.exist() listener.close(done) }) }) diff --git a/test/transport.spec.js b/test/transport.spec.js index b7ff1bc..ccacec3 100644 --- a/test/transport.spec.js +++ b/test/transport.spec.js @@ -1,2 +1 @@ 'use strict' - From 9a993eaa0f75f1cbaa6c52bd256a262b2af9cfdd Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 21 Mar 2017 14:24:31 +0000 Subject: [PATCH 217/337] chore: update package.json --- package.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 58b0ffe..d69afc2 100644 --- a/package.json +++ b/package.json @@ -4,16 +4,16 @@ "description": "A test suite and interface you can use to implement a transport.", "repository": { "type": "git", - "url": "https://github.com/diasdavid/interface-transport.git" + "url": "https://github.com/libp2p/interface-transport.git" }, "main": "src/index.js", "scripts": { "lint": "aegir-lint", "test": "aegir-test", "build": "aegir-build", - "release": "aegir-release", - "release-minor": "aegir-release --type minor", - "release-major": "aegir-release --type major", + "release": "aegir-release --env node", + "release-minor": "aegir-release --type minor --env node", + "release-major": "aegir-release --type major --env node", "coverage": "exit(0)", "coverage-publish": "exit(0)" }, @@ -27,9 +27,9 @@ "author": "David Dias ", "license": "MIT", "bugs": { - "url": "https://github.com/diasdavid/interface-transport/issues" + "url": "https://github.com/libp2p/interface-transport/issues" }, - "homepage": "https://github.com/diasdavid/interface-transport", + "homepage": "https://github.com/libp2p/interface-transport", "devDependencies": { "aegir": "^11.0.0", "dirty-chai": "^1.2.2" From 131f06c47b613193555a793ed6b0ca3fb8275111 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 21 Mar 2017 14:25:02 +0000 Subject: [PATCH 218/337] chore: update contributors --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index d69afc2..8abb611 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "David Dias ", "Friedel Ziegelmayer ", "Richard Littauer ", + "dmitriy ryajov ", "greenkeeperio-bot " ] -} +} \ No newline at end of file From d4ee2a31e0e3c97bbb27a60876368457bb9f5520 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 21 Mar 2017 14:25:02 +0000 Subject: [PATCH 219/337] chore: release version v0.3.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8abb611..2509d1a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.3.4", + "version": "0.3.5", "description": "A test suite and interface you can use to implement a transport.", "repository": { "type": "git", From 7fb08158a2ed90d81068a2615818377686129e98 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Mon, 3 Apr 2017 14:34:08 +0200 Subject: [PATCH 220/337] chore(package): update peer-id to version 0.8.7 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d7c0e0f..63b16ed 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "homepage": "https://github.com/diasdavid/interface-peer-routing", "devDependencies": {}, "dependencies": { - "peer-id": "~0.8.2", + "peer-id": "~0.8.7", "timed-tape": "^0.1.1" } } From 18151886ea768916e87d318ef0251e007b538d6a Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Wed, 31 May 2017 23:39:07 +0200 Subject: [PATCH 221/337] chore(package): update chai to version 4.0.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a078b01..ab6f8a0 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "homepage": "https://github.com/libp2p/interface-stream-muxer", "dependencies": { "async": "^2.1.5", - "chai": "^3.5.0", + "chai": "^4.0.1", "chai-checkmark": "^1.0.1", "detect-node": "^2.0.3", "libp2p-tcp": "~0.9.3", From 057c8d3e6cb5b6897ec32979310199264fa9e8fb Mon Sep 17 00:00:00 2001 From: Greg Zuro Date: Mon, 24 Jul 2017 13:07:55 -0700 Subject: [PATCH 222/337] fix iprs url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cc46073..2c98a18 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ interface-record-store [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) -> A test suite and interface you can use to implement a a [IPRS compliant](https://github.com/ipfs/specs/tree/master/iprs-interplanetary-record-system) Record Store. +> A test suite and interface you can use to implement a a [IPRS compliant](https://github.com/ipfs/specs/tree/master/iprs) Record Store. The primary goal of this module is to enable developers to pick and swap their Record Store module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by [`abstract-blob-store`](https://github.com/maxogden/abstract-blob-store) and [`interface-stream-muxer`](https://github.com/libp2p/interface-stream-muxer). From 8d93b6e5869b9dfa9d7f88e4b1c0024faf497abe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=B4=A0=C9=AA=E1=B4=84=E1=B4=9B=E1=B4=8F=CA=80=20=CA=99?= =?UTF-8?q?=E1=B4=8A=E1=B4=87=CA=9F=E1=B4=8B=CA=9C=E1=B4=8F=CA=9F=E1=B4=8D?= Date: Fri, 24 Nov 2017 18:49:58 +0100 Subject: [PATCH 223/337] Remove console.logs (#47) --- src/close-test.js | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/close-test.js b/src/close-test.js index a8747c5..8c80d97 100644 --- a/src/close-test.js +++ b/src/close-test.js @@ -119,7 +119,6 @@ module.exports = (common) => { series(count.map((i) => (cb) => { parallel([ (cb) => listener.once('stream', (stream) => { - console.log('pipe') expect(stream).to.exist.mark() pull(stream, stream) cb() @@ -137,24 +136,13 @@ module.exports = (common) => { cb(null, val) }, i * 10) }), - pull.through((val) => console.log('send', val)), conn, - pull.through((val) => console.log('recv', val)), pull.collect((err, data) => { - console.log('end', i) expect(err).to.not.exist.mark() expect(data).to.be.eql([Buffer('hello')]).mark() }) ) }) - - listener.on('close', () => { - console.log('closed listener') - }) - - dialer.end(() => { - console.log('CLOSED') - }) }) }) }) From 2d35afd8de449058304ec0ac9ccd8d1b6ae3aff1 Mon Sep 17 00:00:00 2001 From: David Dias Date: Wed, 13 Dec 2017 17:13:39 +0000 Subject: [PATCH 224/337] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f5eede4..2f6f16a 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ The API is presented with both Node.js and Go primitives, however, there is not - [js-libp2p-tcp](https://github.com/libp2p/js-libp2p-tcp) - [js-libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) +- [js-libp2p-websocket-star](https://github.com/libp2p/js-libp2p-websocket-star) - [js-libp2p-websockets](https://github.com/libp2p/js-libp2p-websockets) - [js-libp2p-utp](https://github.com/libp2p/js-libp2p-utp) - [webrtc-explorer](https://github.com/diasdavid/webrtc-explorer) From f3e86748c3d98c7135c499940f397e4ba2113178 Mon Sep 17 00:00:00 2001 From: David Dias Date: Wed, 13 Dec 2017 17:13:59 +0000 Subject: [PATCH 225/337] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2f6f16a..e995384 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ The API is presented with both Node.js and Go primitives, however, there is not - [js-libp2p-tcp](https://github.com/libp2p/js-libp2p-tcp) - [js-libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) +- [js-libp2p-webrtc-direct](https://github.com/libp2p/js-libp2p-webrtc-direct) - [js-libp2p-websocket-star](https://github.com/libp2p/js-libp2p-websocket-star) - [js-libp2p-websockets](https://github.com/libp2p/js-libp2p-websockets) - [js-libp2p-utp](https://github.com/libp2p/js-libp2p-utp) From 61802136813d29480057778ecb3347db9068d8aa Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Wed, 13 Dec 2017 23:47:36 -0600 Subject: [PATCH 226/337] test: increase timeouts (#48) --- package.json | 2 +- src/stress-test.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index ab6f8a0..ecdc456 100644 --- a/package.json +++ b/package.json @@ -53,4 +53,4 @@ "Victor Bjelkholm ", "greenkeeperio-bot " ] -} \ No newline at end of file +} diff --git a/src/stress-test.js b/src/stress-test.js index c42cc2d..f63f305 100644 --- a/src/stress-test.js +++ b/src/stress-test.js @@ -59,7 +59,8 @@ module.exports = (common) => { spawn(muxer, 1000, 10, done) }) - it('1000 streams with 100 msg', (done) => { + it('1000 streams with 100 msg', function (done) { + this.timeout(10 * 1000) spawn(muxer, 1000, 100, done) }) }) From a25ecb19a7839eca8c3c04548368e6a65ed26d65 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 14 Dec 2017 05:52:48 +0000 Subject: [PATCH 227/337] chore: update deps, including aegir --- package-lock.json | 14233 ++++++++++++++++++++++++++++++++++++++++++++ package.json | 22 +- src/base-test.js | 4 +- src/close-test.js | 4 +- 4 files changed, 14248 insertions(+), 15 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..6c05609 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,14233 @@ +{ + "name": "interface-stream-muxer", + "version": "0.5.7", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "JSONStream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", + "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "dev": true, + "requires": { + "jsonparse": "1.3.1", + "through": "2.3.8" + } + }, + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "dev": true, + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", + "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "aegir": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/aegir/-/aegir-12.2.0.tgz", + "integrity": "sha512-KCko6i7rfkSC+ZvCwqBnzEZL4UtzgpnRkr/iSl52trUrojCLiJSknO63XzBGP2EDIEUMUquEbosQ9/bookE5Bw==", + "dev": true, + "requires": { + "async": "2.6.0", + "browserify-zlib": "0.2.0", + "chalk": "2.3.0", + "clean-documentation-theme": "0.5.2", + "codecov": "3.0.0", + "conventional-changelog": "1.1.7", + "conventional-github-releaser": "1.1.13", + "coveralls": "3.0.0", + "detect-node": "2.0.3", + "documentation": "5.3.5", + "es6-promisify": "5.0.0", + "eslint": "4.13.1", + "eslint-config-aegir": "1.0.1", + "execa": "0.8.0", + "filesize": "3.5.11", + "findup-sync": "2.0.0", + "fs-extra": "4.0.3", + "gh-pages": "1.1.0", + "glob": "7.1.2", + "joi": "13.0.2", + "json-loader": "0.5.7", + "karma": "1.7.1", + "karma-chrome-launcher": "2.2.0", + "karma-firefox-launcher": "1.1.0", + "karma-mocha": "1.3.0", + "karma-mocha-own-reporter": "git+https://github.com/dryajov/karma-mocha-own-reporter.git#d562a92a12d5c76469a05d67cee19bcb8db22b23", + "karma-mocha-webworker": "1.3.0", + "karma-sourcemap-loader": "0.3.7", + "karma-webpack": "2.0.7", + "listr": "0.13.0", + "listr-update-renderer": "0.4.0", + "listr-verbose-renderer": "0.4.1", + "lodash": "4.17.4", + "mocha": "4.0.1", + "npm-which": "3.0.1", + "nyc": "11.3.0", + "p-map": "1.2.0", + "pify": "3.0.0", + "pretty-hrtime": "1.0.3", + "rimraf": "2.6.2", + "safe-buffer": "5.1.1", + "semver": "5.4.1", + "simple-git": "1.85.0", + "stream-http": "2.7.2", + "through": "2.3.8", + "transform-loader": "0.2.4", + "uglify-es": "3.2.2", + "update-notifier": "2.3.0", + "webpack": "3.10.0", + "webpack-merge": "4.1.1", + "yargs": "10.0.3" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "ansi-escapes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", + "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "any-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.2.0.tgz", + "integrity": "sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=", + "dev": true + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + }, + "dependencies": { + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + } + } + }, + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "dev": true, + "requires": { + "buffer-equal": "1.0.0" + } + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + } + } + }, + "argv": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", + "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-find": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", + "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "array-iterate": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-1.1.1.tgz", + "integrity": "sha1-hlv3+K851rCYLGCQKRSsdrwBCPY=", + "dev": true + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "asn1.js": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", + "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "assertion-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", + "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=" + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "requires": { + "lodash": "4.17.4" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", + "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", + "dev": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "babel-generator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", + "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-helper-bindify-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-builder-react-jsx": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", + "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "esutils": "2.0.2" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-explode-class": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "dev": true, + "requires": { + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-async-generators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", + "dev": true + }, + "babel-plugin-syntax-class-constructor-call": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", + "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", + "dev": true + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", + "dev": true + }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, + "babel-plugin-syntax-do-expressions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz", + "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=", + "dev": true + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-export-extensions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", + "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", + "dev": true + }, + "babel-plugin-syntax-flow": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", + "dev": true + }, + "babel-plugin-syntax-function-bind": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz", + "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=", + "dev": true + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-system-import-transformer": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-system-import-transformer/-/babel-plugin-system-import-transformer-3.1.0.tgz", + "integrity": "sha1-038Mro5h7zkGAggzHZMbXmMNfF8=", + "dev": true, + "requires": { + "babel-plugin-syntax-dynamic-import": "6.18.0" + } + }, + "babel-plugin-transform-async-generator-functions": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-class-constructor-call": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", + "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", + "dev": true, + "requires": { + "babel-plugin-syntax-class-constructor-call": "6.18.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "dev": true, + "requires": { + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-decorators-legacy": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz", + "integrity": "sha1-dBtY9sW86eYCfgiC2cmU8E82aSU=", + "dev": true, + "requires": { + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-do-expressions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz", + "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", + "dev": true, + "requires": { + "babel-plugin-syntax-do-expressions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-export-extensions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", + "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", + "dev": true, + "requires": { + "babel-plugin-syntax-export-extensions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-flow-strip-types": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", + "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "dev": true, + "requires": { + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-function-bind": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz", + "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", + "dev": true, + "requires": { + "babel-plugin-syntax-function-bind": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-inline-imports-commonjs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-imports-commonjs/-/babel-plugin-transform-inline-imports-commonjs-1.2.0.tgz", + "integrity": "sha1-IMfRkrr8VMhyc4bjOH2O5O8Z5qU=", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "builtin-modules": "1.1.1" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-display-name": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", + "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-jsx": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", + "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", + "dev": true, + "requires": { + "babel-helper-builder-react-jsx": "6.26.0", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-jsx-self": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", + "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", + "dev": true, + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-jsx-source": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", + "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", + "dev": true, + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-preset-env": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", + "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0", + "browserslist": "2.10.0", + "invariant": "2.2.2", + "semver": "5.4.1" + } + }, + "babel-preset-flow": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", + "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", + "dev": true, + "requires": { + "babel-plugin-transform-flow-strip-types": "6.22.0" + } + }, + "babel-preset-react": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", + "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", + "dev": true, + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.24.1", + "babel-plugin-transform-react-jsx-self": "6.22.0", + "babel-plugin-transform-react-jsx-source": "6.22.0", + "babel-preset-flow": "6.23.0" + } + }, + "babel-preset-stage-0": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz", + "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", + "dev": true, + "requires": { + "babel-plugin-transform-do-expressions": "6.22.0", + "babel-plugin-transform-function-bind": "6.22.0", + "babel-preset-stage-1": "6.24.1" + } + }, + "babel-preset-stage-1": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", + "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", + "dev": true, + "requires": { + "babel-plugin-transform-class-constructor-call": "6.24.1", + "babel-plugin-transform-export-extensions": "6.22.0", + "babel-preset-stage-2": "6.24.1" + } + }, + "babel-preset-stage-2": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "dev": true, + "requires": { + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" + } + }, + "babel-preset-stage-3": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.3", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babelify": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-8.0.0.tgz", + "integrity": "sha512-xVr63fKEvMWUrrIbqlHYsMcc5Zdw4FSVesAHgkgajyCE1W8gbm9rbMakqavhxKvikGYMhEcqxTwB/gQmQ6lBtw==", + "dev": true + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "bail": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.2.tgz", + "integrity": "sha1-99bBcxYwqfnw1NNe0fli4gdKF2Q=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.5", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.0", + "pascalcase": "0.1.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "base-x": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.3.tgz", + "integrity": "sha512-qKXPTB94LxXhJs8hqwTdyVTiDXMFTRUFj5F7FnWOW19ALCfANf2lHHUnEcY43g3DaVi4X8E2oDCkHIN8bjr32Q==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "base64url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", + "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", + "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", + "dev": true, + "requires": { + "continuable-cache": "0.3.1", + "error": "7.0.2", + "raw-body": "1.1.7", + "safe-json-parse": "1.0.1" + } + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.1", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.15" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + } + } + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "bowser": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.8.1.tgz", + "integrity": "sha512-NMPaR8ILtdLSWzxQtEs16XbxMcY8ohWGQ5V+TZSJS3fNUt/PBAGkF6YWO9B/4qWE23bK3o0moQKq8UyFEosYkA==", + "dev": true + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "requires": { + "ansi-align": "2.0.0", + "camelcase": "4.1.0", + "chalk": "2.3.0", + "cli-boxes": "1.0.0", + "string-width": "2.1.1", + "term-size": "1.2.0", + "widest-line": "2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-resolve": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", + "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "browserify-aes": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", + "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true, + "requires": { + "browserify-aes": "1.1.1", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.5" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "1.0.6" + } + }, + "browserslist": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.10.0.tgz", + "integrity": "sha512-WyvzSLsuAVPOjbljXnyeWl14Ae+ukAT8MUuagKVzIDvwBxl4UAwD1xqtyQs2eWYPGUKMeC3Ol62goqYuKqTTcw==", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000783", + "electron-to-chromium": "1.3.28" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "3.0.3" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.2.1", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } + }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true + }, + "buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "0.2.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caniuse-lite": { + "version": "1.0.30000783", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000783.tgz", + "integrity": "sha1-m1SZ+xtQPSNF0SqmuGEoUvQnb/0=", + "dev": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "ccount": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.2.tgz", + "integrity": "sha1-U7ai+BW7d7nChx97mnLDol8djok=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + }, + "dependencies": { + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + } + } + }, + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "requires": { + "assertion-error": "1.0.2", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.5" + } + }, + "chai-checkmark": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chai-checkmark/-/chai-checkmark-1.0.1.tgz", + "integrity": "sha1-n7s8mtkQHwl+8ogyjTD0In10//s=" + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "character-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.1.tgz", + "integrity": "sha1-92hxvl72bdt/j440eOzDdMJ9bco=", + "dev": true + }, + "character-entities-html4": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.1.tgz", + "integrity": "sha1-NZoqSg9+KdPcKsmb2+Ie45Q46lA=", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.1.tgz", + "integrity": "sha1-9Ad53xoQGHK7UQo9KV4fzPFHIC8=", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz", + "integrity": "sha1-lCg191Dk7GGjCOYMLvjMEBEgLvw=", + "dev": true + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.1.3", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "class-utils": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.5.tgz", + "integrity": "sha1-F+eTEDdQ+WJ7IXbqNM/RtWWQPIA=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "lazy-cache": "2.0.2", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "clean-documentation-theme": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/clean-documentation-theme/-/clean-documentation-theme-0.5.2.tgz", + "integrity": "sha512-I57pY8V/TM76QsWDu6y+cb2GqyrRW3L9VLfMTHQaXqbmuqn2Jslf4mJc5di9GkOnLYErvCJnD1g69XRS69yN4g==", + "dev": true, + "requires": { + "babel-plugin-transform-inline-imports-commonjs": "1.2.0", + "concat-stream": "1.6.0", + "documentation": "5.3.5", + "documentation-theme-utils": "3.0.0", + "github-slugger": "1.2.0", + "highlight.js": "9.12.0", + "lodash": "4.17.4", + "prop-types": "15.6.0", + "radium": "0.19.6", + "radium-bootstrap-grid": "0.1.8", + "react": "15.6.2", + "react-dom": "15.6.2", + "react-icons": "2.2.7", + "react-pure-render": "1.0.2", + "vinyl": "2.1.0", + "vinyl-fs": "2.4.4" + } + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-spinners": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", + "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", + "dev": true + }, + "cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "dev": true, + "requires": { + "slice-ansi": "0.0.4", + "string-width": "1.0.2" + }, + "dependencies": { + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + } + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "cloneable-readable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", + "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "process-nextick-args": "1.0.7", + "through2": "2.0.3" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codecov": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.0.0.tgz", + "integrity": "sha1-wnO4xPEpRXI+jcnSWAPYk0Pl8o4=", + "dev": true, + "requires": { + "argv": "0.0.2", + "request": "2.81.0", + "urlgrey": "0.4.4" + } + }, + "collapse-white-space": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.3.tgz", + "integrity": "sha1-S5BvZw5aljqHt2sOFolkM0G2Ajw=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combine-lists": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "comma-separated-tokens": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.4.tgz", + "integrity": "sha1-cgg+WNSkYvAYZvZhf02Yo807ikY=", + "dev": true, + "requires": { + "trim": "0.0.1" + } + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "compare-func": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", + "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", + "dev": true, + "requires": { + "array-ify": "1.0.0", + "dot-prop": "3.0.0" + } + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "typedarray": "0.0.6" + } + }, + "configstore": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz", + "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==", + "dev": true, + "requires": { + "dot-prop": "4.2.0", + "graceful-fs": "4.1.11", + "make-dir": "1.1.0", + "unique-string": "1.0.0", + "write-file-atomic": "2.3.0", + "xdg-basedir": "3.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "1.0.1" + } + } + } + }, + "connect": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz", + "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.0.6", + "parseurl": "1.3.2", + "utils-merge": "1.0.1" + } + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "continuable-cache": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", + "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", + "dev": true + }, + "conventional-changelog": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.7.tgz", + "integrity": "sha1-kVGmKx2O2y2CcR2r9bfPcQQfgrE=", + "dev": true, + "requires": { + "conventional-changelog-angular": "1.5.3", + "conventional-changelog-atom": "0.1.2", + "conventional-changelog-codemirror": "0.2.1", + "conventional-changelog-core": "1.9.4", + "conventional-changelog-ember": "0.2.10", + "conventional-changelog-eslint": "0.2.1", + "conventional-changelog-express": "0.2.1", + "conventional-changelog-jquery": "0.1.0", + "conventional-changelog-jscs": "0.1.0", + "conventional-changelog-jshint": "0.2.1" + } + }, + "conventional-changelog-angular": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.5.3.tgz", + "integrity": "sha512-J+3g7H7O9QTxBFMmdlHSLzqTdxO8lhOKGXLAcewtKPGaVVV/JnaPOokuj85mP3tghP5gXi527HWoJlD3VBlX6g==", + "dev": true, + "requires": { + "compare-func": "1.3.2", + "q": "1.5.1" + } + }, + "conventional-changelog-atom": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.1.2.tgz", + "integrity": "sha1-Ella1SZ6aTfDTPkAKBscZRmKTGM=", + "dev": true, + "requires": { + "q": "1.5.1" + } + }, + "conventional-changelog-codemirror": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.2.1.tgz", + "integrity": "sha1-KZpPcUe681DmyBWPxUlUopHFzAk=", + "dev": true, + "requires": { + "q": "1.5.1" + } + }, + "conventional-changelog-core": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-1.9.4.tgz", + "integrity": "sha512-C8R8Bb706P10hYaGzllvH92O8Ck7xCGPB7t2Y+S1O2yf13BDvDW5BPdjyBwY2VgVNuFyNqi6qA458N+W9txpHg==", + "dev": true, + "requires": { + "conventional-changelog-writer": "2.0.3", + "conventional-commits-parser": "2.1.0", + "dateformat": "1.0.12", + "get-pkg-repo": "1.4.0", + "git-raw-commits": "1.3.0", + "git-remote-origin-url": "2.0.0", + "git-semver-tags": "1.2.3", + "lodash": "4.17.4", + "normalize-package-data": "2.4.0", + "q": "1.5.1", + "read-pkg": "1.1.0", + "read-pkg-up": "1.0.1", + "through2": "2.0.3" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "conventional-changelog-ember": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.2.10.tgz", + "integrity": "sha512-LBBBZO6Q7ib4HhSdyCNVR25OtaXl710UJg1aSHCLmR8AjuXKs3BO8tnbY1MH+D1C+z5IFoEDkpjOddefNTyhCQ==", + "dev": true, + "requires": { + "q": "1.5.1" + } + }, + "conventional-changelog-eslint": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-0.2.1.tgz", + "integrity": "sha1-LCoRvrIW+AZJunKDQYApO2h8BmI=", + "dev": true, + "requires": { + "q": "1.5.1" + } + }, + "conventional-changelog-express": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.2.1.tgz", + "integrity": "sha1-g42eHmyQmXA7FQucGaoteBdCvWw=", + "dev": true, + "requires": { + "q": "1.5.1" + } + }, + "conventional-changelog-jquery": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", + "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=", + "dev": true, + "requires": { + "q": "1.5.1" + } + }, + "conventional-changelog-jscs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz", + "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=", + "dev": true, + "requires": { + "q": "1.5.1" + } + }, + "conventional-changelog-jshint": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.2.1.tgz", + "integrity": "sha1-hhObs6yZiZ8rF36WF+CbN9mbzzo=", + "dev": true, + "requires": { + "compare-func": "1.3.2", + "q": "1.5.1" + } + }, + "conventional-changelog-writer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-2.0.3.tgz", + "integrity": "sha512-2E1h7UXL0fhRO5h0CxDZ5EBc5sfBZEQePvuZ+gPvApiRrICUyNDy/NQIP+2TBd4wKZQf2Zm7TxbzXHG5HkPIbA==", + "dev": true, + "requires": { + "compare-func": "1.3.2", + "conventional-commits-filter": "1.1.1", + "dateformat": "1.0.12", + "handlebars": "4.0.11", + "json-stringify-safe": "5.0.1", + "lodash": "4.17.4", + "meow": "3.7.0", + "semver": "5.4.1", + "split": "1.0.1", + "through2": "2.0.3" + } + }, + "conventional-commits-filter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.1.tgz", + "integrity": "sha512-bQyatySNKHhcaeKVr9vFxYWA1W1Tdz6ybVMYDmv4/FhOXY1+fchiW07TzRbIQZhVa4cvBwrEaEUQBbCncFSdJQ==", + "dev": true, + "requires": { + "is-subset": "0.1.1", + "modify-values": "1.0.0" + } + }, + "conventional-commits-parser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.0.tgz", + "integrity": "sha512-8MD05yN0Zb6aRsZnFX1ET+8rHWfWJk+my7ANCJZBU2mhz7TSB1fk2vZhkrwVy/PCllcTYAP/1T1NiWQ7Z01mKw==", + "dev": true, + "requires": { + "JSONStream": "1.3.1", + "is-text-path": "1.0.1", + "lodash": "4.17.4", + "meow": "3.7.0", + "split2": "2.2.0", + "through2": "2.0.3", + "trim-off-newlines": "1.0.1" + } + }, + "conventional-github-releaser": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/conventional-github-releaser/-/conventional-github-releaser-1.1.13.tgz", + "integrity": "sha1-C+ezp8eGfoiL5SZHWlkP9ZMDUXw=", + "dev": true, + "requires": { + "conventional-changelog": "1.1.7", + "dateformat": "1.0.12", + "git-semver-tags": "1.2.3", + "github": "0.2.4", + "lodash.merge": "4.6.0", + "meow": "3.7.0", + "object-assign": "4.1.1", + "q": "1.5.1", + "semver": "5.4.1", + "semver-regex": "1.0.0", + "through2": "2.0.3" + } + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "coveralls": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.0.tgz", + "integrity": "sha512-ZppXR9y5PraUOrf/DzHJY6gzNUhXYE3b9D43xEXs4QYZ7/Oe0Gy0CS+IPKWFfvQFXB3RG9QduaQUFehzSpGAFw==", + "dev": true, + "requires": { + "js-yaml": "3.10.0", + "lcov-parse": "0.0.10", + "log-driver": "1.2.5", + "minimist": "1.2.0", + "request": "2.81.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "1.0.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.9" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.9" + } + }, + "create-react-class": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.2.tgz", + "integrity": "sha1-zx7RXxKq1/FO9fLf4F5sQvke8Co=", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.0", + "randombytes": "2.0.5", + "randomfill": "1.0.3" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "0.10.37" + } + }, + "dargs": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", + "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "date-fns": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", + "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", + "dev": true + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "requires": { + "type-detect": "4.0.5" + } + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.11" + } + }, + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.1" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "detab": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.1.tgz", + "integrity": "sha512-/hhdqdQc5thGrqzjyO/pz76lDZ5GSuAs6goxOaKTsvPk7HNnzAyFN5lyHgqpX4/s1i66K8qMGj+VhA9504x7DQ==", + "dev": true, + "requires": { + "repeat-string": "1.6.1" + } + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "detect-node": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", + "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=" + }, + "detective": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.0.tgz", + "integrity": "sha512-4mBqSEdMfBpRAo/DQZnTcAXenpiSIJmVKbCMSotS+SFWWcrP/CKM6iBRPdTiEO+wZhlfEsoZlGqpG6ycl5vTqw==", + "dev": true, + "requires": { + "acorn": "5.2.1", + "defined": "1.0.0" + } + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.5" + } + }, + "disparity": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/disparity/-/disparity-2.0.0.tgz", + "integrity": "sha1-V92stHMkrl9Y0swNqIbbTOnutxg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "diff": "1.4.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + } + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + }, + "doctrine-temporary-fork": { + "version": "2.0.0-alpha-allowarrayindex", + "resolved": "https://registry.npmjs.org/doctrine-temporary-fork/-/doctrine-temporary-fork-2.0.0-alpha-allowarrayindex.tgz", + "integrity": "sha1-QAFahn6yfnWybIKLcVJPE3+J+fA=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + }, + "documentation": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/documentation/-/documentation-5.3.5.tgz", + "integrity": "sha512-VApv5dCFxjD5WZxEYGqZypK7L3l00clw9qbSTYCwdnvsaAhu7/U+FCHvkdtnCtkmLupIF/SxXPfXc4kB3UfXEg==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "babel-core": "6.26.0", + "babel-generator": "6.26.0", + "babel-plugin-system-import-transformer": "3.1.0", + "babel-plugin-transform-decorators-legacy": "1.3.4", + "babel-preset-env": "1.6.1", + "babel-preset-react": "6.24.1", + "babel-preset-stage-0": "6.24.1", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babelify": "8.0.0", + "babylon": "6.18.0", + "chalk": "2.3.0", + "chokidar": "1.7.0", + "concat-stream": "1.6.0", + "disparity": "2.0.0", + "doctrine-temporary-fork": "2.0.0-alpha-allowarrayindex", + "get-port": "3.2.0", + "git-url-parse": "6.2.2", + "github-slugger": "1.2.0", + "glob": "7.1.2", + "globals-docs": "2.4.0", + "highlight.js": "9.12.0", + "js-yaml": "3.10.0", + "lodash": "4.17.4", + "mdast-util-inject": "1.1.0", + "micromatch": "3.1.4", + "mime": "1.6.0", + "module-deps-sortable": "4.0.6", + "parse-filepath": "1.0.1", + "pify": "3.0.0", + "read-pkg-up": "3.0.0", + "remark": "8.0.0", + "remark-html": "7.0.0", + "remark-toc": "4.0.1", + "remote-origin-url": "0.4.0", + "shelljs": "0.7.8", + "stream-array": "1.1.2", + "strip-json-comments": "2.0.1", + "tiny-lr": "1.0.5", + "unist-builder": "1.0.2", + "unist-util-visit": "1.3.0", + "vfile": "2.3.0", + "vfile-reporter": "4.0.0", + "vfile-sort": "2.1.0", + "vinyl": "2.1.0", + "vinyl-fs": "3.0.0", + "yargs": "9.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "vinyl-fs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.0.tgz", + "integrity": "sha1-zjRZK5DAM4vaLVwSFWaXNlH5DCM=", + "dev": true, + "requires": { + "flush-write-stream": "1.0.2", + "fs-mkdirp-stream": "1.0.0", + "glob-stream": "6.1.0", + "graceful-fs": "4.1.11", + "is-valid-glob": "1.0.0", + "lazystream": "1.0.0", + "lead": "1.0.0", + "object.assign": "4.0.4", + "pumpify": "1.3.5", + "remove-bom-buffer": "3.0.0", + "remove-bom-stream": "1.2.0", + "resolve-options": "1.1.0", + "through2": "2.0.3", + "to-through": "2.0.0", + "value-or-function": "3.0.0", + "vinyl": "2.1.0", + "vinyl-sourcemap": "1.1.0" + } + }, + "yargs": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "dev": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + }, + "dependencies": { + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + } + } + } + } + }, + "documentation-theme-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/documentation-theme-utils/-/documentation-theme-utils-3.0.0.tgz", + "integrity": "sha1-itJslFw3FNV0RRvmQCUKCkKOVk0=", + "dev": true, + "requires": { + "doctrine": "1.5.0", + "globals-docs": "2.4.0", + "unist-builder": "1.0.2" + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "1.0.1", + "ent": "2.2.0", + "extend": "3.0.1", + "void-elements": "2.0.1" + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, + "dot-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", + "dev": true, + "requires": { + "is-obj": "1.0.1" + } + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "duplexify": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", + "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==", + "dev": true, + "requires": { + "end-of-stream": "1.4.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "stream-shift": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + }, + "dependencies": { + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.28", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.28.tgz", + "integrity": "sha1-jdTmRYCGZE6fnwoc8y4qH53/2e4=", + "dev": true + }, + "elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emoji-regex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, + "requires": { + "iconv-lite": "0.4.19" + } + }, + "end-of-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "engine.io": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", + "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "ws": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", + "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.2", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.7", + "wtf-8": "1.0.0" + } + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.8" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "errno": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.6.tgz", + "integrity": "sha512-IsORQDpaaSwcDP4ZZnHxgE85werpo34VYn1Ud3mq+eUsF593faR8oCZNXrROVkpFu2TsbrNhHin0aUrTsQ9vNw==", + "dev": true, + "requires": { + "prr": "1.0.1" + } + }, + "error": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", + "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", + "dev": true, + "requires": { + "string-template": "0.2.1", + "xtend": "4.0.1" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es5-ext": { + "version": "0.10.37", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.37.tgz", + "integrity": "sha1-DudB0Ui4AGm6J9AgOTdWryV978M=", + "dev": true, + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37", + "es6-symbol": "3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-promise": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz", + "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "4.1.1" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.0", + "estraverse": "4.2.0" + } + }, + "eslint": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.13.1.tgz", + "integrity": "sha512-UCJVV50RtLHYzBp1DZ8CMPtRSg4iVZvjgO9IJHIKyWU/AnJVjtdRikoUPLB29n5pzMB7TnsLQWf0V6VUJfoPfw==", + "dev": true, + "requires": { + "ajv": "5.5.1", + "babel-code-frame": "6.26.0", + "chalk": "2.3.0", + "concat-stream": "1.6.0", + "cross-spawn": "5.1.0", + "debug": "3.1.0", + "doctrine": "2.0.2", + "eslint-scope": "3.7.1", + "espree": "3.5.2", + "esquery": "1.0.0", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.2", + "globals": "11.1.0", + "ignore": "3.3.7", + "imurmurhash": "0.1.4", + "inquirer": "3.3.0", + "is-resolvable": "1.0.1", + "js-yaml": "3.10.0", + "json-stable-stringify-without-jsonify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "7.0.0", + "progress": "2.0.0", + "require-uncached": "1.0.3", + "semver": "5.4.1", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", + "table": "4.0.2", + "text-table": "0.2.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.1.tgz", + "integrity": "sha1-s4u4h22ehr7plJVqBOch6IskjrI=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.2.tgz", + "integrity": "sha512-y0tm5Pq6ywp3qSTZ1vPgVdAnbDEoeoc5wlOHXoY1c4Wug/a7JvqHIl7BTvwodaHmejWkK/9dSb3sCYfyo/om8A==", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, + "globals": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.1.0.tgz", + "integrity": "sha512-uEuWt9mqTlPDwSqi+sHjD4nWU/1N+q0fiWI9T1mZpD2UENqX20CFD5T/ziLZvztPaBKl7ZylUi1q6Qfm7E2CiQ==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "eslint-config-aegir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-aegir/-/eslint-config-aegir-1.0.1.tgz", + "integrity": "sha1-UxLUvPBj4sbz7Pdhm66PDNTMegQ=", + "dev": true, + "requires": { + "eslint-config-standard": "10.2.1", + "eslint-plugin-import": "2.8.0", + "eslint-plugin-node": "5.2.1", + "eslint-plugin-promise": "3.6.0", + "eslint-plugin-standard": "3.0.1" + } + }, + "eslint-config-standard": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", + "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz", + "integrity": "sha512-yUtXS15gIcij68NmXmP9Ni77AQuCN0itXbCc/jWd8C6/yKZaSNXicpC8cgvjnxVdmfsosIXrjpzFq7GcDryb6A==", + "dev": true, + "requires": { + "debug": "2.6.9", + "resolve": "1.5.0" + } + }, + "eslint-module-utils": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz", + "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "pkg-dir": "1.0.0" + } + }, + "eslint-plugin-import": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz", + "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==", + "dev": true, + "requires": { + "builtin-modules": "1.1.1", + "contains-path": "0.1.0", + "debug": "2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "0.3.1", + "eslint-module-utils": "2.1.1", + "has": "1.0.1", + "lodash.cond": "4.5.2", + "minimatch": "3.0.4", + "read-pkg-up": "2.0.0" + }, + "dependencies": { + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + } + } + }, + "eslint-plugin-node": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz", + "integrity": "sha512-xhPXrh0Vl/b7870uEbaumb2Q+LxaEcOQ3kS1jtIXanBAwpMre1l5q/l2l/hESYJGEFKuI78bp6Uw50hlpr7B+g==", + "dev": true, + "requires": { + "ignore": "3.3.7", + "minimatch": "3.0.4", + "resolve": "1.5.0", + "semver": "5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "eslint-plugin-promise": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz", + "integrity": "sha512-YQzM6TLTlApAr7Li8vWKR+K3WghjwKcYzY0d2roWap4SLK+kzuagJX/leTetIDWsFcTFnKNJXWupDCD6aZkP2Q==", + "dev": true + }, + "eslint-plugin-standard": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", + "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=", + "dev": true + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "4.2.0", + "estraverse": "4.2.0" + } + }, + "espree": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz", + "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", + "dev": true, + "requires": { + "acorn": "5.2.1", + "acorn-jsx": "3.0.1" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "esquery": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "esrecurse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "dev": true, + "requires": { + "estraverse": "4.2.0", + "object-assign": "4.1.1" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37" + } + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50=", + "dev": true + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-braces": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "requires": { + "array-slice": "0.2.3", + "array-unique": "0.2.1", + "braces": "0.1.5" + }, + "dependencies": { + "braces": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "dev": true, + "requires": { + "expand-range": "0.1.1" + } + }, + "expand-range": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "dev": true, + "requires": { + "is-number": "0.1.1", + "repeat-string": "0.2.2" + } + }, + "is-number": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true + }, + "repeat-string": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true + } + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "1.0.1" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "external-editor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", + "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", + "dev": true, + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.19", + "tmp": "0.0.33" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + }, + "fbjs": { + "version": "0.8.16", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", + "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", + "dev": true, + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "promise": "7.3.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.17" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "dev": true + } + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "filesize": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.5.11.tgz", + "integrity": "sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g==", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "finalhandler": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", + "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "1.0.0", + "is-glob": "3.1.0", + "micromatch": "3.1.4", + "resolve-dir": "1.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "first-chunk-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "dev": true + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, + "flush-write-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", + "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "1.0.0" + } + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.1" + } + }, + "fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "through2": "2.0.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.8.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.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.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + }, + "get-pkg-repo": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", + "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "meow": "3.7.0", + "normalize-package-data": "2.4.0", + "parse-github-repo-url": "1.4.1", + "through2": "2.0.3" + } + }, + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "gh-pages": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-1.1.0.tgz", + "integrity": "sha512-ZpDkeOVmIrN5mz+sBWDz5zmTqcbNJzI/updCwEv/7rrSdpTNlj1B5GhBqG7f4Q8p5sJOdnBV0SIqxJrxtZQ9FA==", + "dev": true, + "requires": { + "async": "2.6.0", + "base64url": "2.0.0", + "commander": "2.11.0", + "fs-extra": "4.0.3", + "globby": "6.1.0", + "graceful-fs": "4.1.11", + "rimraf": "2.6.2" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "git-raw-commits": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.0.tgz", + "integrity": "sha1-C8hZbpDV/+c29/VUa9LRL3OrqsY=", + "dev": true, + "requires": { + "dargs": "4.1.0", + "lodash.template": "4.4.0", + "meow": "3.7.0", + "split2": "2.2.0", + "through2": "2.0.3" + } + }, + "git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", + "dev": true, + "requires": { + "gitconfiglocal": "1.0.0", + "pify": "2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "git-semver-tags": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.2.3.tgz", + "integrity": "sha1-GItFOIK/nXojr9Mbq6U32rc4jV0=", + "dev": true, + "requires": { + "meow": "3.7.0", + "semver": "5.4.1" + } + }, + "git-up": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-2.0.9.tgz", + "integrity": "sha1-IZv9J8gtrurYSVvrOG3Bjq5jY20=", + "dev": true, + "requires": { + "is-ssh": "1.3.0", + "parse-url": "1.3.11" + } + }, + "git-url-parse": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-6.2.2.tgz", + "integrity": "sha1-vkkCThS4SHVTQ2tFcri0OVMvqHE=", + "dev": true, + "requires": { + "git-up": "2.0.9" + } + }, + "gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", + "dev": true, + "requires": { + "ini": "1.3.5" + } + }, + "github": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/github/-/github-0.2.4.tgz", + "integrity": "sha1-JPp/DhP6EblGr5ETTFGYKpHOU4s=", + "dev": true, + "requires": { + "mime": "1.6.0" + } + }, + "github-slugger": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.2.0.tgz", + "integrity": "sha512-wIaa75k1vZhyPm9yWrD08A5Xnx/V+RmzGrpjQuLemGKSb77Qukiaei58Bogrl/LZSADDfPzKJX8jhLs4CRTl7Q==", + "dev": true, + "requires": { + "emoji-regex": "6.1.1" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dev": true, + "requires": { + "extend": "3.0.1", + "glob": "7.1.2", + "glob-parent": "3.1.0", + "is-negated-glob": "1.0.0", + "ordered-read-streams": "1.0.1", + "pumpify": "1.3.5", + "readable-stream": "2.3.3", + "remove-trailing-separator": "1.1.0", + "to-absolute-glob": "2.0.1", + "unique-stream": "2.2.1" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "1.3.5" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "1.0.2", + "is-windows": "1.0.1", + "resolve-dir": "1.0.1" + }, + "dependencies": { + "is-windows": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz", + "integrity": "sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk=", + "dev": true + } + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "homedir-polyfill": "1.0.1", + "ini": "1.3.5", + "is-windows": "1.0.1", + "which": "1.3.0" + }, + "dependencies": { + "is-windows": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz", + "integrity": "sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk=", + "dev": true + } + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globals-docs": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/globals-docs/-/globals-docs-2.4.0.tgz", + "integrity": "sha512-B69mWcqCmT3jNYmSxRxxOXWfzu3Go8NQXPfl2o0qPd1EEFhwW0dFUg9ztTu915zPQzqwIhWAlw6hmfIcCK4kkQ==", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "3.0.2", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.0", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "unzip-response": "2.0.1", + "url-parse-lax": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true + }, + "gulp-sourcemaps": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", + "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", + "dev": true, + "requires": { + "convert-source-map": "1.5.1", + "graceful-fs": "4.1.11", + "strip-bom": "2.0.0", + "through2": "2.0.3", + "vinyl": "1.2.0" + }, + "dependencies": { + "clone": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "1.0.3", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + } + } + }, + "handlebars": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true + } + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "hast-util-is-element": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.0.0.tgz", + "integrity": "sha1-P3IWl4sq4U2YdJh4eCZ18zvjzgA=", + "dev": true + }, + "hast-util-sanitize": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-1.1.2.tgz", + "integrity": "sha1-0QvWdXoh5ZwTq8iuNTDdO219Z54=", + "dev": true, + "requires": { + "xtend": "4.0.1" + } + }, + "hast-util-to-html": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-3.1.0.tgz", + "integrity": "sha1-iCyZhJ5AEw6ZHAQuRW1FPZXDbP8=", + "dev": true, + "requires": { + "ccount": "1.0.2", + "comma-separated-tokens": "1.0.4", + "hast-util-is-element": "1.0.0", + "hast-util-whitespace": "1.0.0", + "html-void-elements": "1.0.2", + "kebab-case": "1.0.0", + "property-information": "3.2.0", + "space-separated-tokens": "1.1.1", + "stringify-entities": "1.3.1", + "unist-util-is": "2.1.1", + "xtend": "4.0.1" + } + }, + "hast-util-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.0.tgz", + "integrity": "sha1-vQlpGWJdKTbh/xe8Tff9cn8X7Ok=", + "dev": true + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "highlight.js": { + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", + "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "1.0.0" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, + "html-void-elements": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.2.tgz", + "integrity": "sha1-nSLgyjKsyVs/RbjVtPb73AWv/VU=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "http-parser-js": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz", + "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=", + "dev": true + }, + "http-proxy": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "hyphenate-style-name": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz", + "integrity": "sha1-MRYKNpMK2vH8BMYHT360FGXU7Es=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inline-style-prefixer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-2.0.5.tgz", + "integrity": "sha1-wVPH6I/YT+9cYC6VqBaLJ3BnH+c=", + "dev": true, + "requires": { + "bowser": "1.8.1", + "hyphenate-style-name": "1.0.2" + } + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "3.0.0", + "chalk": "2.3.0", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.1.0", + "figures": "2.0.0", + "lodash": "4.17.4", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "interface-connection": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/interface-connection/-/interface-connection-0.3.2.tgz", + "integrity": "sha1-5JSYg/bqeft+3QHuP0/KR6Kf0sQ=", + "requires": { + "pull-defer": "0.2.2", + "timed-tape": "0.1.1" + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "ip-address": { + "version": "5.8.9", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-5.8.9.tgz", + "integrity": "sha512-7ay355oMN34iXhET1BmCJVsHjOTSItEEIIpOs38qUC23AIhOy+xIPnkrTuEFjeLMrTJ7m8KMXWgWfy/2Vn9sDw==", + "requires": { + "jsbn": "1.1.0", + "lodash.find": "4.6.0", + "lodash.max": "4.0.1", + "lodash.merge": "4.6.0", + "lodash.padstart": "4.6.1", + "lodash.repeat": "4.1.0", + "sprintf-js": "1.1.0" + } + }, + "is-absolute": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", + "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", + "dev": true, + "requires": { + "is-relative": "0.2.1", + "is-windows": "0.2.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-alphabetical": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.1.tgz", + "integrity": "sha1-x3B5zJHU76x3W+EDS/LSQ/lebwg=", + "dev": true + }, + "is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz", + "integrity": "sha1-37SqTRCF4zvbYcLe6cgOnGwZ9Ts=", + "dev": true, + "requires": { + "is-alphabetical": "1.0.1", + "is-decimal": "1.0.1" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.11.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-decimal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.1.tgz", + "integrity": "sha1-9ftqlJlq2ejjdh+/vQkfH8qMToI=", + "dev": true + }, + "is-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.1.tgz", + "integrity": "sha512-G3fFVFTqfaqu7r4YuSBHKBAuOaLz8Sy7ekklUpFEliaLMP1Y2ZjoN9jS62YWCAPQrQpMUQSitRlrzibbuCZjdA==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-hexadecimal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz", + "integrity": "sha1-bghLvJIGH7sJcexYts5tQE4k2mk=", + "dev": true + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "0.1.1", + "is-path-inside": "1.0.1" + } + }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "dev": true + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz", + "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", + "dev": true, + "requires": { + "symbol-observable": "0.2.4" + } + }, + "is-odd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-1.0.0.tgz", + "integrity": "sha1-O4qTLrAos3dcObsJ6RdnrM22kIg=", + "dev": true, + "requires": { + "is-number": "3.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + } + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-relative": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", + "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", + "dev": true, + "requires": { + "is-unc-path": "0.1.2" + } + }, + "is-resolvable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.1.tgz", + "integrity": "sha512-y5CXYbzvB3jTnWAZH1Nl7ykUWb6T3BcTs56HUruwBf8MhF56n1HWqhDWnVFo8GHrUPDgvUUNVhrc2U8W7iqz5g==", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-ssh": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.0.tgz", + "integrity": "sha1-6+oRaaJhTaOSpjdANmw84EnY3/Y=", + "dev": true, + "requires": { + "protocols": "1.4.6" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", + "dev": true + }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "requires": { + "text-extensions": "1.7.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unc-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", + "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", + "dev": true, + "requires": { + "unc-path-regex": "0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "dev": true + }, + "is-whitespace-character": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz", + "integrity": "sha1-muAXbzKCtlRXoZks2whPil+DPjs=", + "dev": true + }, + "is-windows": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", + "dev": true + }, + "is-word-character": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.1.tgz", + "integrity": "sha1-WgP6HqkazopusMfNdw64bWXIvvs=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", + "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", + "dev": true + }, + "isemail": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.0.0.tgz", + "integrity": "sha512-rz0ng/c+fX+zACpLgDB8fnUQ845WSU06f4hlhk4K8TJxmR6f5hyvitu9a9JdMD7aq/P4E0XdG1uaab2OiXgHlA==", + "dev": true, + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true + } + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dev": true, + "requires": { + "node-fetch": "1.7.3", + "whatwg-fetch": "2.0.3" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "joi": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/joi/-/joi-13.0.2.tgz", + "integrity": "sha512-kVka3LaHQyENvcMW4WJPSepGM43oCofcKxfs9HbbKd/FrwBAAt4lNNTPKOzSMmV53GIspmNO4U3O2TzoGvxxCA==", + "dev": true, + "requires": { + "hoek": "5.0.2", + "isemail": "3.0.0", + "topo": "3.0.0" + }, + "dependencies": { + "hoek": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.2.tgz", + "integrity": "sha512-NA10UYP9ufCtY2qYGkZktcQXwVyYK4zK0gkaFSB96xhtlo6V8tKXdQgx8eHolQTRemaW0uLn8BhjhwqrOU+QLQ==", + "dev": true + } + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } + }, + "jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha1-sBMHyym2GKHtJux56RH4A8TaAEA=" + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz", + "integrity": "sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonbird": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/jsonbird/-/jsonbird-2.2.2.tgz", + "integrity": "sha512-48n9HTL6Vxhr6WqX78ROH5NddK//ZnSdu1ZnPyyOl9IzF2PyRmwC8nCKPiRFo1wx7/Byq5YezCqokq9T/McLhw==", + "dev": true, + "requires": { + "jsonparse": "1.3.1", + "readable-stream": "2.3.3", + "shortid": "2.2.8" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "karma": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", + "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "body-parser": "1.18.2", + "chokidar": "1.7.0", + "colors": "1.1.2", + "combine-lists": "1.0.1", + "connect": "3.6.5", + "core-js": "2.5.3", + "di": "0.0.1", + "dom-serialize": "2.2.1", + "expand-braces": "0.1.2", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "http-proxy": "1.16.2", + "isbinaryfile": "3.0.2", + "lodash": "3.10.1", + "log4js": "0.6.38", + "mime": "1.6.0", + "minimatch": "3.0.4", + "optimist": "0.6.1", + "qjobs": "1.1.5", + "range-parser": "1.2.0", + "rimraf": "2.6.2", + "safe-buffer": "5.1.1", + "socket.io": "1.7.3", + "source-map": "0.5.7", + "tmp": "0.0.31", + "useragent": "2.2.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + } + } + }, + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "dev": true, + "requires": { + "fs-access": "1.0.1", + "which": "1.3.0" + } + }, + "karma-firefox-launcher": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.1.0.tgz", + "integrity": "sha512-LbZ5/XlIXLeQ3cqnCbYLn+rOVhuMIK9aZwlP6eOLGzWdo1UVp7t6CN3DP4SafiRLjexKwHeKHDm0c38Mtd3VxA==", + "dev": true + }, + "karma-mocha": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", + "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=", + "dev": true, + "requires": { + "minimist": "1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "karma-mocha-own-reporter": { + "version": "git+https://github.com/dryajov/karma-mocha-own-reporter.git#d562a92a12d5c76469a05d67cee19bcb8db22b23", + "dev": true + }, + "karma-mocha-webworker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/karma-mocha-webworker/-/karma-mocha-webworker-1.3.0.tgz", + "integrity": "sha1-taQwG1m6hqCO5bXwrvHtuGO+yyY=", + "dev": true, + "requires": { + "jsonbird": "2.2.2", + "minimatch": "3.0.4" + } + }, + "karma-sourcemap-loader": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", + "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "karma-webpack": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-2.0.7.tgz", + "integrity": "sha512-cE7tZbuxjPXzRXyp/GsDla2p0SRNqih5Yj0ptXA7xYrUChYr1QsMUw7D3rTmZgeaXOUnBr4nOfqqwOdfnWWCfA==", + "dev": true, + "requires": { + "async": "0.9.2", + "loader-utils": "0.2.17", + "lodash": "3.10.1", + "source-map": "0.5.7", + "webpack-dev-middleware": "1.12.2" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "kebab-case": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/kebab-case/-/kebab-case-1.0.0.tgz", + "integrity": "sha1-P55JkK3K0MaGwOcB92RYaPdfkes=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "4.0.1" + } + }, + "lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", + "dev": true, + "requires": { + "set-getter": "0.1.0" + } + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "lcov-parse": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", + "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", + "dev": true + }, + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "dev": true, + "requires": { + "flush-write-stream": "1.0.2" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "libp2p-tcp": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/libp2p-tcp/-/libp2p-tcp-0.11.1.tgz", + "integrity": "sha512-8CFykuSedjOqtFhT1X82M7cW+4PDCgnUK5ygkg/vSaQqKdRWMBtVqGId2mCCOJ2aP/nGJ0kp/bP904napI9XKQ==", + "requires": { + "interface-connection": "0.3.2", + "ip-address": "5.8.9", + "lodash.includes": "4.3.0", + "lodash.isfunction": "3.0.8", + "mafmt": "3.0.2", + "multiaddr": "3.0.1", + "once": "1.4.0", + "stream-to-pull-stream": "1.7.2" + } + }, + "listr": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz", + "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-truncate": "0.2.1", + "figures": "1.7.0", + "indent-string": "2.1.0", + "is-observable": "0.2.0", + "is-promise": "2.1.0", + "is-stream": "1.1.0", + "listr-silent-renderer": "1.1.1", + "listr-update-renderer": "0.4.0", + "listr-verbose-renderer": "0.4.1", + "log-symbols": "1.0.2", + "log-update": "1.0.2", + "ora": "0.2.3", + "p-map": "1.2.0", + "rxjs": "5.5.5", + "stream-to-observable": "0.2.0", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "dev": true + }, + "listr-update-renderer": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz", + "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-truncate": "0.2.1", + "elegant-spinner": "1.0.1", + "figures": "1.7.0", + "indent-string": "3.2.0", + "log-symbols": "1.0.2", + "log-update": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "listr-verbose-renderer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", + "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "date-fns": "1.29.0", + "figures": "1.7.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "livereload-js": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz", + "integrity": "sha1-bIclfmSKtHW8JOoldFftzB+NC8I=", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "4.0.0", + "pify": "3.0.0", + "strip-bom": "3.0.0" + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash.cond": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", + "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", + "dev": true + }, + "lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" + }, + "lodash.find": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", + "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, + "lodash.isfunction": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.8.tgz", + "integrity": "sha1-TbcJ/IG8So/XEnpFilNGxc3OLGs=" + }, + "lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + }, + "lodash.max": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.max/-/lodash.max-4.0.1.tgz", + "integrity": "sha1-hzVWbGGLNan3YFILSHrnllivE2o=" + }, + "lodash.merge": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz", + "integrity": "sha1-aYhLoUSsM/5plzemCG3v+t0PicU=" + }, + "lodash.padstart": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", + "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" + }, + "lodash.repeat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-4.1.0.tgz", + "integrity": "sha1-/H3oEx2MisB+S0n3T/6CnR8r7EQ=" + }, + "lodash.template": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", + "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.templatesettings": "4.1.0" + } + }, + "lodash.templatesettings": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", + "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0" + } + }, + "log-driver": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", + "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=", + "dev": true + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "log-update": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", + "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "cli-cursor": "1.0.2" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + } + } + }, + "log4js": { + "version": "0.6.38", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "semver": "4.3.6" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "longest-streak": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz", + "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==", + "dev": true + }, + "looper": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/looper/-/looper-3.0.0.tgz", + "integrity": "sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k=" + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "mafmt": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-3.0.2.tgz", + "integrity": "sha512-BUXP1OceVN2/t2SiMH8iNTGQZ4BQK4iVWUEIT/dIyUqHypiAcUZvtW5u+CSHGcmNT2KopqDkPzhWu1K7Fy8pqg==", + "requires": { + "multiaddr": "3.0.1" + } + }, + "make-dir": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", + "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, + "markdown-escapes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.1.tgz", + "integrity": "sha1-GZTfLTr0gR3lmmcUk0wrIpJzRRg=", + "dev": true + }, + "markdown-table": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.1.tgz", + "integrity": "sha1-Sz3ToTPRUYuO8NvHCb8qG0gkvIw=", + "dev": true + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + } + } + }, + "mdast-util-compact": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz", + "integrity": "sha1-zbX4TitqLTEU3zO9BdnLMuPECDo=", + "dev": true, + "requires": { + "unist-util-modify-children": "1.1.1", + "unist-util-visit": "1.3.0" + } + }, + "mdast-util-definitions": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-1.2.2.tgz", + "integrity": "sha512-9NloPSwaB9f1PKcGqaScfqRf6zKOEjTIXVIbPOmgWI/JKxznlgVXC5C+8qgl3AjYg2vJBRgLYfLICaNiac89iA==", + "dev": true, + "requires": { + "unist-util-visit": "1.3.0" + } + }, + "mdast-util-inject": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-inject/-/mdast-util-inject-1.1.0.tgz", + "integrity": "sha1-2wa4tYW+lZotzS+H9HK6m3VvNnU=", + "dev": true, + "requires": { + "mdast-util-to-string": "1.0.4" + } + }, + "mdast-util-to-hast": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-3.0.0.tgz", + "integrity": "sha512-zvEXH2AUevWfKuBqtEPNcDUPI8UC6yIVvgEgNi1v1dLnzb5Pfm+PZjnZn0FhW1WmHcrGMX059MAoqicEauzjcw==", + "dev": true, + "requires": { + "collapse-white-space": "1.0.3", + "detab": "2.0.1", + "mdast-util-definitions": "1.2.2", + "mdurl": "1.0.1", + "trim": "0.0.1", + "trim-lines": "1.1.0", + "unist-builder": "1.0.2", + "unist-util-generated": "1.1.1", + "unist-util-position": "3.0.0", + "unist-util-visit": "1.3.0", + "xtend": "4.0.1" + } + }, + "mdast-util-to-string": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.0.4.tgz", + "integrity": "sha1-XEVch4yTVfDB5/PotxnPWDaRrPs=", + "dev": true + }, + "mdast-util-toc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-toc/-/mdast-util-toc-2.0.1.tgz", + "integrity": "sha1-sdLLI7+wH4Evp7Vb/+iwqL7fbyE=", + "dev": true, + "requires": { + "github-slugger": "1.2.0", + "mdast-util-to-string": "1.0.4", + "unist-util-visit": "1.3.0" + } + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.6", + "readable-stream": "2.3.3" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "micromatch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.4.tgz", + "integrity": "sha512-kFRtviKYoAJT+t7HggMl0tBFGNAKLw/S7N+CO9qfEQyisob1Oy4pao+geRbkyeEd+V9aOkvZ4mhuyPvI/q9Sfg==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.0", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "extglob": "2.0.2", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.6", + "object.pick": "1.3.0", + "regex-not": "1.0.0", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.0.tgz", + "integrity": "sha512-P4O8UQRdGiMLWSizsApmXVQDBS6KCt7dSexgLKBmH5Hr1CZq7vsnscFh8oR1sP1ab1Zj0uCHCEzZeV6SfUf3rA==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.1", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.1" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.0", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "extglob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.2.tgz", + "integrity": "sha512-I0+eZBH+jFGL8F5BnIz2ON2nKCjTS3AS3H/5PeSmCp7UVC70Ym8IhdRiQly2juKYQ//f7z1aj1BRpQniFJoU1w==", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.0", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "dev": true + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "dev": true, + "requires": { + "mime-db": "1.30.0" + } + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.0.tgz", + "integrity": "sha512-dgaCvoh6i1nosAUBKb0l0pfJ78K8+S9fluyIR2YvAeUD/QuMahnFnF3xYty5eYXMjhGSsB0DsW6A0uAZyetoAg==", + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.0.1.tgz", + "integrity": "sha512-evDmhkoA+cBNiQQQdSKZa2b9+W2mpLoj50367lhy+Klnx9OV8XlCIhigUnn1gaTFLQCa0kdNhEGDr0hCXOQFDw==", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.3.1", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "diff": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "dev": true + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "modify-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.0.tgz", + "integrity": "sha1-4rbN65zhn5kxelNyLz2/XfXqqrI=", + "dev": true + }, + "module-deps-sortable": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/module-deps-sortable/-/module-deps-sortable-4.0.6.tgz", + "integrity": "sha1-ElGkuixEqS32mJvQKdoSGk8hCbA=", + "dev": true, + "requires": { + "JSONStream": "1.3.1", + "browser-resolve": "1.11.2", + "concat-stream": "1.5.2", + "defined": "1.0.0", + "detective": "4.7.0", + "duplexer2": "0.1.4", + "inherits": "2.0.3", + "parents": "1.0.1", + "readable-stream": "2.3.3", + "resolve": "1.5.0", + "stream-combiner2": "1.1.1", + "subarg": "1.0.0", + "through2": "2.0.3", + "xtend": "4.0.1" + }, + "dependencies": { + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + } + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multiaddr": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-3.0.1.tgz", + "integrity": "sha512-MnEf7gozRpX+x5sVl38lwv59YX9/HBojJuunINH+ko1/k11RMe3igA2oAOea1wVDltD5xkDnsoVxWnFiRxsScw==", + "requires": { + "bs58": "4.0.1", + "ip": "1.1.5", + "lodash.filter": "4.6.0", + "lodash.map": "4.6.0", + "varint": "5.0.0", + "xtend": "4.0.1" + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", + "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.6.tgz", + "integrity": "sha512-WJ6XTCbvWXUFPbi/bDwKcYkCeOGUHzaJj72KbuPqGn78Ba/F5Vu26Zlo6SuMQbCIst1RGKL1zfWBCOGAlbRLAg==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "is-odd": "1.0.0", + "kind-of": "5.1.0", + "object.pick": "1.3.0", + "regex-not": "1.0.0", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dev": true, + "requires": { + "encoding": "0.1.12", + "is-stream": "1.1.0" + } + }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.1.7", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.3", + "stream-browserify": "2.0.1", + "stream-http": "2.7.2", + "string_decoder": "1.0.3", + "timers-browserify": "2.0.4", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.4.1", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "now-and-later": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz", + "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "npm-path": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.3.tgz", + "integrity": "sha1-Fc/04ciaONp39W9gVbJPl137K74=", + "dev": true, + "requires": { + "which": "1.3.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "npm-which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", + "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", + "dev": true, + "requires": { + "commander": "2.11.0", + "npm-path": "2.0.3", + "which": "1.3.0" + } + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nyc": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.3.0.tgz", + "integrity": "sha512-oUu0WHt1k/JMIODvAYXX6C50Mupw2GO34P/Jdg2ty9xrLufBthHiKR2gf08aF+9S0abW1fl24R7iKRBXzibZmg==", + "dev": true, + "requires": { + "archy": "1.0.0", + "arrify": "1.0.1", + "caching-transform": "1.0.1", + "convert-source-map": "1.5.0", + "debug-log": "1.0.1", + "default-require-extensions": "1.0.0", + "find-cache-dir": "0.1.1", + "find-up": "2.1.0", + "foreground-child": "1.5.6", + "glob": "7.1.2", + "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-hook": "1.1.0", + "istanbul-lib-instrument": "1.9.1", + "istanbul-lib-report": "1.1.2", + "istanbul-lib-source-maps": "1.2.2", + "istanbul-reports": "1.1.3", + "md5-hex": "1.3.0", + "merge-source-map": "1.0.4", + "micromatch": "2.3.11", + "mkdirp": "0.5.1", + "resolve-from": "2.0.0", + "rimraf": "2.6.2", + "signal-exit": "3.0.2", + "spawn-wrap": "1.3.8", + "test-exclude": "4.1.1", + "yargs": "10.0.3", + "yargs-parser": "8.0.0" + }, + "dependencies": { + "align-text": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "bundled": true, + "dev": true + }, + "append-transform": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "requires": { + "default-require-extensions": "1.0.0" + } + }, + "archy": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "arrify": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "async": { + "version": "1.5.2", + "bundled": true, + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-generator": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "core-js": "2.5.1", + "regenerator-runtime": "0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "bundled": true, + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "bundled": true, + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "builtin-modules": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "caching-transform": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "md5-hex": "1.3.0", + "mkdirp": "0.5.1", + "write-file-atomic": "1.3.4" + } + }, + "camelcase": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true + }, + "center-align": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "cliui": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "commondir": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "convert-source-map": { + "version": "1.5.0", + "bundled": true, + "dev": true + }, + "core-js": { + "version": "2.5.1", + "bundled": true, + "dev": true + }, + "cross-spawn": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.3.0" + } + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "debug-log": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "default-require-extensions": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "strip-bom": "2.0.0" + } + }, + "detect-indent": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "error-ex": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "esutils": { + "version": "2.0.2", + "bundled": true, + "dev": true + }, + "execa": { + "version": "0.7.0", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + } + } + }, + "expand-brackets": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "bundled": true, + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "extglob": { + "version": "0.3.2", + "bundled": true, + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "bundled": true, + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "find-cache-dir": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "for-in": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "for-own": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "foreground-child": { + "version": "1.5.6", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "4.0.2", + "signal-exit": "3.0.2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "get-caller-file": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "bundled": true, + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "9.18.0", + "bundled": true, + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "bundled": true, + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "bundled": true, + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "has-ansi": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "hosted-git-info": { + "version": "2.5.0", + "bundled": true, + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "invariant": { + "version": "2.2.2", + "bundled": true, + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "is-buffer": { + "version": "1.1.5", + "bundled": true, + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-dotfile": { + "version": "1.0.3", + "bundled": true, + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "isobject": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "append-transform": "0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.9.1", + "bundled": true, + "dev": true, + "requires": { + "babel-generator": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.1.1", + "semver": "5.4.1" + } + }, + "istanbul-lib-report": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" + }, + "dependencies": { + "supports-color": { + "version": "3.2.3", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.2", + "bundled": true, + "dev": true, + "requires": { + "debug": "3.1.0", + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "source-map": "0.5.7" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "istanbul-reports": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "requires": { + "handlebars": "4.0.11" + } + }, + "js-tokens": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "jsesc": { + "version": "1.3.0", + "bundled": true, + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + }, + "lazy-cache": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "lcid": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "bundled": true, + "dev": true + } + } + }, + "lodash": { + "version": "4.17.4", + "bundled": true, + "dev": true + }, + "longest": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "lru-cache": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "md5-hex": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "md5-o-matic": "0.1.1" + } + }, + "md5-o-matic": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "mem": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, + "merge-source-map": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "micromatch": { + "version": "2.3.11", + "bundled": true, + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "mimic-fn": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "normalize-package-data": { + "version": "2.4.0", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.4.1", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true + }, + "object.omit": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "optimist": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "p-limit": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "p-locate": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-limit": "1.1.0" + } + }, + "parse-glob": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "path-exists": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "path-type": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "bundled": true, + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "bundled": true, + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "find-up": "1.1.2" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + } + } + }, + "preserve": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "read-pkg": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + } + } + }, + "regenerator-runtime": { + "version": "0.11.0", + "bundled": true, + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "bundled": true, + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "bundled": true, + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "bundled": true, + "dev": true + }, + "repeating": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "resolve-from": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "right-align": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "semver": { + "version": "5.4.1", + "bundled": true, + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "slide": { + "version": "1.1.6", + "bundled": true, + "dev": true + }, + "source-map": { + "version": "0.5.7", + "bundled": true, + "dev": true + }, + "spawn-wrap": { + "version": "1.3.8", + "bundled": true, + "dev": true, + "requires": { + "foreground-child": "1.5.6", + "mkdirp": "0.5.1", + "os-homedir": "1.0.2", + "rimraf": "2.6.2", + "signal-exit": "3.0.2", + "which": "1.3.0" + } + }, + "spdx-correct": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "test-exclude": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "require-main-filename": "1.0.1" + } + }, + "to-fast-properties": { + "version": "1.0.3", + "bundled": true, + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "which": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "window-size": { + "version": "0.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "0.0.3", + "bundled": true, + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "write-file-atomic": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } + }, + "y18n": { + "version": "3.2.1", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "2.1.2", + "bundled": true, + "dev": true + }, + "yargs": { + "version": "10.0.3", + "bundled": true, + "dev": true, + "requires": { + "cliui": "3.2.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "8.0.0" + }, + "dependencies": { + "cliui": { + "version": "3.2.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + } + } + }, + "yargs-parser": { + "version": "8.0.0", + "bundled": true, + "dev": true, + "requires": { + "camelcase": "4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "bundled": true, + "dev": true + } + } + } + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + } + } + }, + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.assign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz", + "integrity": "sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "function-bind": "1.1.1", + "object-keys": "1.0.11" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "ora": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", + "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-spinners": "0.1.2", + "object-assign": "4.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + }, + "dependencies": { + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", + "dev": true + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.1.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "6.7.1", + "registry-auth-token": "3.3.1", + "registry-url": "3.1.0", + "semver": "5.4.1" + } + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "dev": true + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dev": true, + "requires": { + "path-platform": "0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true, + "requires": { + "asn1.js": "4.9.2", + "browserify-aes": "1.1.1", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" + } + }, + "parse-entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.1.tgz", + "integrity": "sha1-gRLYhHExnyerrk1klksSL+ThuJA=", + "dev": true, + "requires": { + "character-entities": "1.2.1", + "character-entities-legacy": "1.1.1", + "character-reference-invalid": "1.1.1", + "is-alphanumerical": "1.0.1", + "is-decimal": "1.0.1", + "is-hexadecimal": "1.0.1" + } + }, + "parse-filepath": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", + "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", + "dev": true, + "requires": { + "is-absolute": "0.2.6", + "map-cache": "0.2.2", + "path-root": "0.1.1" + } + }, + "parse-git-config": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-0.2.0.tgz", + "integrity": "sha1-Jygz/dFf6hRvt10zbSNrljtv9wY=", + "dev": true, + "requires": { + "ini": "1.3.5" + } + }, + "parse-github-repo-url": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz", + "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "1.3.1", + "json-parse-better-errors": "1.0.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parse-url": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-1.3.11.tgz", + "integrity": "sha1-V8FUKKuKiSsfQ4aWRccR0OFEtVQ=", + "dev": true, + "requires": { + "is-ssh": "1.3.0", + "protocols": "1.4.6" + } + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "0.1.2" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" + }, + "pbkdf2": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "dev": true, + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.9" + } + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "1.1.2" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + } + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "requires": { + "asap": "2.0.6" + } + }, + "prop-types": { + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", + "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + }, + "property-information": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-3.2.0.tgz", + "integrity": "sha1-/RSDyPusYYCPX+NZ52k6H0ilgzE=", + "dev": true + }, + "protocols": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.6.tgz", + "integrity": "sha1-+LsmPqG1/Xp2BNJri+Ob13Z4v4o=", + "dev": true + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.5" + } + }, + "pull-defer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/pull-defer/-/pull-defer-0.2.2.tgz", + "integrity": "sha1-CIew/7MK8ypW2+z6csFnInHwexM=" + }, + "pull-generate": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pull-generate/-/pull-generate-2.2.0.tgz", + "integrity": "sha1-bXg38O7eq/UUs0ekw1ZcsZRnxJw=" + }, + "pull-pair": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pull-pair/-/pull-pair-1.1.0.tgz", + "integrity": "sha1-fuQnJj/fTaglOXrAoF4atLdL120=" + }, + "pull-stream": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.1.tgz", + "integrity": "sha1-xcKuSlEkbv7rzGXAQSo9clqSzgA=" + }, + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "dev": true, + "requires": { + "end-of-stream": "1.4.0", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz", + "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=", + "dev": true, + "requires": { + "duplexify": "3.5.1", + "inherits": "2.0.3", + "pump": "1.0.3" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qjobs": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", + "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "radium": { + "version": "0.19.6", + "resolved": "https://registry.npmjs.org/radium/-/radium-0.19.6.tgz", + "integrity": "sha512-IABYntqCwYelUUIwA52maSCgJbqtJjHKIoD21wgpw3dGhIUbJ5chDShDGdaFiEzdF03hN9jfQqlmn0bF4YhfrQ==", + "dev": true, + "requires": { + "array-find": "1.0.0", + "exenv": "1.2.2", + "inline-style-prefixer": "2.0.5", + "prop-types": "15.6.0" + } + }, + "radium-bootstrap-grid": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/radium-bootstrap-grid/-/radium-bootstrap-grid-0.1.8.tgz", + "integrity": "sha1-KcUC+wNyt3VDsw7W0H2EtDp6kk8=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "randombytes": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", + "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "randomfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", + "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "dev": true, + "requires": { + "randombytes": "2.0.5", + "safe-buffer": "5.1.1" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", + "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", + "dev": true, + "requires": { + "bytes": "1.0.0", + "string_decoder": "0.10.31" + }, + "dependencies": { + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "rc": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz", + "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", + "dev": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "react": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz", + "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=", + "dev": true, + "requires": { + "create-react-class": "15.6.2", + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.6.0" + } + }, + "react-dom": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.2.tgz", + "integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.6.0" + } + }, + "react-icon-base": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-icon-base/-/react-icon-base-2.1.0.tgz", + "integrity": "sha1-oZbjP98eeqof2jrvu2i9rZ6Cp50=", + "dev": true + }, + "react-icons": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-2.2.7.tgz", + "integrity": "sha512-0n4lcGqzJFcIQLoQytLdJCE0DKSA9dkwEZRYoGrIDJZFvIT6Hbajx5mv9geqhqFiNjUgtxg8kPyDfjlhymbGFg==", + "dev": true, + "requires": { + "react-icon-base": "2.1.0" + } + }, + "react-pure-render": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/react-pure-render/-/react-pure-render-1.0.2.tgz", + "integrity": "sha1-nYqSjH8sN1E8LQZOV7Pjw1bp+rs=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "4.0.0", + "normalize-package-data": "2.4.0", + "path-type": "3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "3.0.0" + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "set-immediate-shim": "1.0.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.5.0" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regex-not": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.0.tgz", + "integrity": "sha1-Qvg+OXcWIt+CawKvF2Ul1qXxV/k=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "registry-auth-token": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", + "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", + "dev": true, + "requires": { + "rc": "1.2.2", + "safe-buffer": "5.1.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "1.2.2" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remark": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-8.0.0.tgz", + "integrity": "sha512-K0PTsaZvJlXTl9DN6qYlvjTkqSZBFELhROZMrblm2rB+085flN84nz4g/BscKRMqDvhzlK1oQ/xnWQumdeNZYw==", + "dev": true, + "requires": { + "remark-parse": "4.0.0", + "remark-stringify": "4.0.0", + "unified": "6.1.6" + } + }, + "remark-html": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/remark-html/-/remark-html-7.0.0.tgz", + "integrity": "sha512-jqRzkZXCkM12gIY2ibMLTW41m7rfanliMTVQCFTezHJFsbH00YaTox/BX4gU+f/zCdzfhFJONtebFByvpMv37w==", + "dev": true, + "requires": { + "hast-util-sanitize": "1.1.2", + "hast-util-to-html": "3.1.0", + "mdast-util-to-hast": "3.0.0", + "xtend": "4.0.1" + } + }, + "remark-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-4.0.0.tgz", + "integrity": "sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw==", + "dev": true, + "requires": { + "collapse-white-space": "1.0.3", + "is-alphabetical": "1.0.1", + "is-decimal": "1.0.1", + "is-whitespace-character": "1.0.1", + "is-word-character": "1.0.1", + "markdown-escapes": "1.0.1", + "parse-entities": "1.1.1", + "repeat-string": "1.6.1", + "state-toggle": "1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "1.1.0", + "unherit": "1.1.0", + "unist-util-remove-position": "1.1.1", + "vfile-location": "2.0.2", + "xtend": "4.0.1" + } + }, + "remark-slug": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-4.2.3.tgz", + "integrity": "sha1-jZh9Dl5j1KSeo3uQ/pmaPc/IG3I=", + "dev": true, + "requires": { + "github-slugger": "1.2.0", + "mdast-util-to-string": "1.0.4", + "unist-util-visit": "1.3.0" + } + }, + "remark-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-4.0.0.tgz", + "integrity": "sha512-xLuyKTnuQer3ke9hkU38SUYLiTmS078QOnoFavztmbt/pAJtNSkNtFgR0U//uCcmG0qnyxao+PDuatQav46F1w==", + "dev": true, + "requires": { + "ccount": "1.0.2", + "is-alphanumeric": "1.0.0", + "is-decimal": "1.0.1", + "is-whitespace-character": "1.0.1", + "longest-streak": "2.0.2", + "markdown-escapes": "1.0.1", + "markdown-table": "1.1.1", + "mdast-util-compact": "1.0.1", + "parse-entities": "1.1.1", + "repeat-string": "1.6.1", + "state-toggle": "1.0.0", + "stringify-entities": "1.3.1", + "unherit": "1.1.0", + "xtend": "4.0.1" + } + }, + "remark-toc": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-toc/-/remark-toc-4.0.1.tgz", + "integrity": "sha1-/zb/beVOoH3Vnj9TNKSjqsHpMYU=", + "dev": true, + "requires": { + "mdast-util-toc": "2.0.1", + "remark-slug": "4.2.3" + } + }, + "remote-origin-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/remote-origin-url/-/remote-origin-url-0.4.0.tgz", + "integrity": "sha1-TT4pAvNOLTfRwmPYdxC3frQIajA=", + "dev": true, + "requires": { + "parse-git-config": "0.2.0" + } + }, + "remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "requires": { + "is-buffer": "1.1.6", + "is-utf8": "0.2.1" + } + }, + "remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "dev": true, + "requires": { + "remove-bom-buffer": "3.0.0", + "safe-buffer": "5.1.1", + "through2": "2.0.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "0.6.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.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "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": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + }, + "dependencies": { + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", + "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "global-modules": "1.0.0" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "dev": true, + "requires": { + "value-or-function": "3.0.0" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "2.1.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "4.0.8" + } + }, + "rxjs": { + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.5.tgz", + "integrity": "sha512-D/MfQnPMBk8P8gfwGxvCkuaWBcG58W7dUMT//URPoYzIbDEKT0GezdirkK5whMgKFBATfCoTpxO8bJQGJ04W5A==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + }, + "dependencies": { + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "safe-json-parse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", + "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", + "dev": true + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "5.4.1" + } + }, + "semver-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", + "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-getter": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", + "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", + "dev": true, + "requires": { + "to-object-path": "0.3.0" + } + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + }, + "sha.js": { + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", + "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "7.1.2", + "interpret": "1.1.0", + "rechoir": "0.6.2" + } + }, + "shortid": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.8.tgz", + "integrity": "sha1-AzsRfWoul1gE9vCWnb59PQs1UTE=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "simple-git": { + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.85.0.tgz", + "integrity": "sha1-VjrSke/IoSdzXo+815aWc3dhTNQ=", + "dev": true, + "requires": { + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } + } + }, + "snapdragon": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", + "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.1", + "use": "2.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "socket.io": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", + "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "dev": true, + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.3", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.7.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "dev": true, + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-client": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", + "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.3", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "dev": true, + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "dev": true + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "dev": true, + "requires": { + "atob": "2.0.3", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "space-separated-tokens": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.1.tgz", + "integrity": "sha1-lpW5355lrsGBHUw/nOUlILwvfk0=", + "dev": true, + "requires": { + "trim": "0.0.1" + } + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.1.tgz", + "integrity": "sha512-Fg1xXAv+qXKdwHiJFMcZSqsMcbPlkzsZtf8KkLJ2fqnP+lqg2RjEKgDcSfO9CO1+p4LZKgApDBUUUqKaaRhwZQ==", + "dev": true, + "requires": { + "is-extendable": "1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "split2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", + "dev": true, + "requires": { + "through2": "2.0.3" + } + }, + "sprintf-js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.0.tgz", + "integrity": "sha1-z/yvcC2vZeo5u04PorKZzsGhvkY=" + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + } + } + }, + "state-toggle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.0.tgz", + "integrity": "sha1-0g+aYWu08MO5i5GSLSW2QKorxCU=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + }, + "stream-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/stream-array/-/stream-array-1.1.2.tgz", + "integrity": "sha1-nl9zRfITfDDuO0mLkRToC1K7frU=", + "dev": true, + "requires": { + "readable-stream": "2.1.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", + "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "requires": { + "duplexer2": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "stream-http": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "stream-to-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz", + "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", + "dev": true, + "requires": { + "any-observable": "0.2.0" + } + }, + "stream-to-pull-stream": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/stream-to-pull-stream/-/stream-to-pull-stream-1.7.2.tgz", + "integrity": "sha1-dXYJrhzr0zx0MtSvvjH/eGULnd4=", + "requires": { + "looper": "3.0.0", + "pull-stream": "3.6.1" + } + }, + "string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringify-entities": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.1.tgz", + "integrity": "sha1-sVDsLXKsTBtfMktR+2soyc3/BYw=", + "dev": true, + "requires": { + "character-entities-html4": "1.1.1", + "character-entities-legacy": "1.1.1", + "is-alphanumerical": "1.0.1", + "is-hexadecimal": "1.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-bom-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", + "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", + "dev": true, + "requires": { + "first-chunk-stream": "1.0.0", + "strip-bom": "2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, + "requires": { + "minimist": "1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + }, + "symbol-observable": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", + "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", + "dev": true + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "5.5.1", + "ajv-keywords": "2.1.1", + "chalk": "2.3.0", + "lodash": "4.17.4", + "slice-ansi": "1.0.0", + "string-width": "2.1.1" + }, + "dependencies": { + "ajv": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.1.tgz", + "integrity": "sha1-s4u4h22ehr7plJVqBOch6IskjrI=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "tapable": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "dev": true + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "0.7.0" + }, + "dependencies": { + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + } + } + }, + "text-extensions": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz", + "integrity": "sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg==", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "through2-filter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", + "dev": true, + "requires": { + "through2": "2.0.3", + "xtend": "4.0.1" + } + }, + "time-stamp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", + "dev": true + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "timed-tape": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/timed-tape/-/timed-tape-0.1.1.tgz", + "integrity": "sha1-m25WnxfmbHnx7tLSX/eWL8dBjkk=" + }, + "timers-browserify": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", + "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "tiny-lr": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.0.5.tgz", + "integrity": "sha512-YrxUSiMgOVh3PnAqtdAUQuUVEVRnqcRCxJ3BHrl/aaWV2fplKKB60oClM0GH2Gio2hcXvkxMUxsC/vXZrQePlg==", + "dev": true, + "requires": { + "body": "5.1.0", + "debug": "2.6.9", + "faye-websocket": "0.10.0", + "livereload-js": "2.2.2", + "object-assign": "4.1.1", + "qs": "6.5.1" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "to-absolute-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.1.tgz", + "integrity": "sha1-cMN1gFueMQXome6NvdapqhCPQHs=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-absolute": "0.2.6", + "is-negated-glob": "1.0.0" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "to-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz", + "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "regex-not": "1.0.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + } + } + }, + "to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "dev": true, + "requires": { + "through2": "2.0.3" + } + }, + "topo": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.0.tgz", + "integrity": "sha512-Tlu1fGlR90iCdIPURqPiufqAlCZYzLjHYVVbcFWDMcX7+tK8hdZWAfsMrD/pBul9jqHHwFjNdf1WaxA9vTRRhw==", + "dev": true, + "requires": { + "hoek": "5.0.2" + }, + "dependencies": { + "hoek": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.2.tgz", + "integrity": "sha512-NA10UYP9ufCtY2qYGkZktcQXwVyYK4zK0gkaFSB96xhtlo6V8tKXdQgx8eHolQTRemaW0uLn8BhjhwqrOU+QLQ==", + "dev": true + } + } + }, + "tough-cookie": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "transform-loader": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/transform-loader/-/transform-loader-0.2.4.tgz", + "integrity": "sha1-5ch4d7qW1R0/IlNoWHtG4ibRzsk=", + "dev": true, + "requires": { + "loader-utils": "1.1.0" + }, + "dependencies": { + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + } + } + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "trim-lines": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-1.1.0.tgz", + "integrity": "sha1-mSbQPt4Tuhj31CIiYx+wTHn/Jv4=", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-off-newlines": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", + "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "trim-trailing-lines": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.0.tgz", + "integrity": "sha1-eu+7eAjfnWafbaLkOMrIxGradoQ=", + "dev": true + }, + "trough": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.1.tgz", + "integrity": "sha1-qf2LA5Swro//guBjOgo2zK1bX4Y=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-detect": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.5.tgz", + "integrity": "sha512-N9IvkQslUGYGC24RkJk1ba99foK6TkwC2FHAEBlQFBP0RxQZS8ZpJuAZcwiY/w9ZJHFQb1aOXBI60OdxhTrwEQ==" + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.17" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.17", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", + "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", + "dev": true + }, + "uglify-es": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.2.2.tgz", + "integrity": "sha512-l+s5VLzFwGJfS+fbqaGf/Dfwo1MF13jLOF2ekL0PytzqEqQ6cVppvHf4jquqFok+35USMpKjqkYxy6pQyUcuug==", + "dev": true, + "requires": { + "commander": "2.12.2", + "source-map": "0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", + "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-js": "2.8.29", + "webpack-sources": "1.1.0" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "unherit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.0.tgz", + "integrity": "sha1-a5qu379z3xdWrZ4xbdmBiFhAzX0=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "xtend": "4.0.1" + } + }, + "unified": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/unified/-/unified-6.1.6.tgz", + "integrity": "sha512-pW2f82bCIo2ifuIGYcV12fL96kMMYgw7JKVEgh7ODlrM9rj6vXSY3BV+H6lCcv1ksxynFf582hwWLnA1qRFy4w==", + "dev": true, + "requires": { + "bail": "1.0.2", + "extend": "3.0.1", + "is-plain-obj": "1.1.0", + "trough": "1.0.1", + "vfile": "2.3.0", + "x-is-function": "1.0.4", + "x-is-string": "0.1.0" + } + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "unique-stream": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", + "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", + "dev": true, + "requires": { + "json-stable-stringify": "1.0.1", + "through2-filter": "2.0.0" + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "1.0.0" + } + }, + "unist-builder": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-1.0.2.tgz", + "integrity": "sha1-jDuZA+9kvPsRfdfPal2Y/Bs7J7Y=", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + }, + "unist-util-generated": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.1.tgz", + "integrity": "sha1-mfFseJWayFTe58YVwpGSTIv03n8=", + "dev": true + }, + "unist-util-is": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.1.tgz", + "integrity": "sha1-DDEmKeP5YMZukx6BLT2A53AQlHs=", + "dev": true + }, + "unist-util-modify-children": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-1.1.1.tgz", + "integrity": "sha1-ZtfmpEnm9nIguXarPLi166w55R0=", + "dev": true, + "requires": { + "array-iterate": "1.1.1" + } + }, + "unist-util-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.0.tgz", + "integrity": "sha1-5uHgPu64HF4a/lU+jUrfvXwNj4I=", + "dev": true + }, + "unist-util-remove-position": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.1.tgz", + "integrity": "sha1-WoXBVV/BugwQG4ZwfRXlD6TIcbs=", + "dev": true, + "requires": { + "unist-util-visit": "1.3.0" + } + }, + "unist-util-stringify-position": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.1.tgz", + "integrity": "sha1-PMvcU2ee7W7PN3fdf14yKcG2qjw=", + "dev": true + }, + "unist-util-visit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.3.0.tgz", + "integrity": "sha512-9ntYcxPFtl44gnwXrQKZ5bMqXMY0ZHzUpqMFiU4zcc8mmf/jzYm8GhYgezuUlX4cJIM1zIDYaO6fG/fI+L6iiQ==", + "dev": true, + "requires": { + "unist-util-is": "2.1.1" + } + }, + "universalify": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", + "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, + "update-notifier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz", + "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=", + "dev": true, + "requires": { + "boxen": "1.3.0", + "chalk": "2.3.0", + "configstore": "3.1.1", + "import-lazy": "2.1.0", + "is-installed-globally": "0.1.0", + "is-npm": "1.0.0", + "latest-version": "3.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "3.0.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } + }, + "urlgrey": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", + "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", + "dev": true + }, + "use": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", + "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "isobject": "3.0.1", + "lazy-cache": "2.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "useragent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", + "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", + "dev": true, + "requires": { + "lru-cache": "2.2.4", + "tmp": "0.0.33" + }, + "dependencies": { + "lru-cache": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", + "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", + "dev": true + } + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "dev": true + }, + "vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "dev": true + }, + "varint": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.0.tgz", + "integrity": "sha1-2Ca4n3SQcy+rwMDtaT7Uddyynr8=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "vfile": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", + "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", + "dev": true, + "requires": { + "is-buffer": "1.1.6", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "1.1.1", + "vfile-message": "1.0.0" + } + }, + "vfile-location": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.2.tgz", + "integrity": "sha1-02dcWch3SY5JK0dW/2Xkrxp1IlU=", + "dev": true + }, + "vfile-message": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.0.tgz", + "integrity": "sha512-HPREhzTOB/sNDc9/Mxf8w0FmHnThg5CRSJdR9VRFkD2riqYWs+fuXlj5z8mIpv2LrD7uU41+oPWFOL4Mjlf+dw==", + "dev": true, + "requires": { + "unist-util-stringify-position": "1.1.1" + } + }, + "vfile-reporter": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-4.0.0.tgz", + "integrity": "sha1-6m8K4TQvSEFXOYXgX5QXNvJ96do=", + "dev": true, + "requires": { + "repeat-string": "1.6.1", + "string-width": "1.0.2", + "supports-color": "4.5.0", + "unist-util-stringify-position": "1.1.1", + "vfile-statistics": "1.1.0" + } + }, + "vfile-sort": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.1.0.tgz", + "integrity": "sha1-SVAcnou+Wt/y6bOnZx7hseIMUhA=", + "dev": true + }, + "vfile-statistics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.0.tgz", + "integrity": "sha1-AhBMYP3u0dEbH3OtZTMLdjSz2JU=", + "dev": true + }, + "vinyl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", + "dev": true, + "requires": { + "clone": "2.1.1", + "clone-buffer": "1.0.0", + "clone-stats": "1.0.0", + "cloneable-readable": "1.0.0", + "remove-trailing-separator": "1.1.0", + "replace-ext": "1.0.0" + } + }, + "vinyl-fs": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", + "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", + "dev": true, + "requires": { + "duplexify": "3.5.1", + "glob-stream": "5.3.5", + "graceful-fs": "4.1.11", + "gulp-sourcemaps": "1.6.0", + "is-valid-glob": "0.3.0", + "lazystream": "1.0.0", + "lodash.isequal": "4.5.0", + "merge-stream": "1.0.1", + "mkdirp": "0.5.1", + "object-assign": "4.1.1", + "readable-stream": "2.3.3", + "strip-bom": "2.0.0", + "strip-bom-stream": "1.0.0", + "through2": "2.0.3", + "through2-filter": "2.0.0", + "vali-date": "1.0.0", + "vinyl": "1.2.0" + }, + "dependencies": { + "clone": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + } + }, + "glob-stream": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", + "dev": true, + "requires": { + "extend": "3.0.1", + "glob": "5.0.15", + "glob-parent": "3.1.0", + "micromatch": "2.3.11", + "ordered-read-streams": "0.3.0", + "through2": "0.6.5", + "to-absolute-glob": "0.1.1", + "unique-stream": "2.2.1" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } + } + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-valid-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "ordered-read-streams": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", + "dev": true, + "requires": { + "is-stream": "1.1.0", + "readable-stream": "2.3.3" + } + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "to-absolute-glob": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1" + } + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "1.0.3", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + } + } + }, + "vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "dev": true, + "requires": { + "append-buffer": "1.0.2", + "convert-source-map": "1.5.1", + "graceful-fs": "4.1.11", + "normalize-path": "2.1.1", + "now-and-later": "2.0.0", + "remove-bom-buffer": "3.0.0", + "vinyl": "2.1.0" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "watchpack": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", + "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "dev": true, + "requires": { + "async": "2.6.0", + "chokidar": "1.7.0", + "graceful-fs": "4.1.11" + } + }, + "webpack": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.10.0.tgz", + "integrity": "sha512-fxxKXoicjdXNUMY7LIdY89tkJJJ0m1Oo8PQutZ5rLgWbV5QVKI15Cn7+/IHnRTd3vfKfiwBx6SBqlorAuNA8LA==", + "dev": true, + "requires": { + "acorn": "5.2.1", + "acorn-dynamic-import": "2.0.2", + "ajv": "5.5.1", + "ajv-keywords": "2.1.1", + "async": "2.6.0", + "enhanced-resolve": "3.4.1", + "escope": "3.6.0", + "interpret": "1.1.0", + "json-loader": "0.5.7", + "json5": "0.5.1", + "loader-runner": "2.3.0", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "mkdirp": "0.5.1", + "node-libs-browser": "2.1.0", + "source-map": "0.5.7", + "supports-color": "4.5.0", + "tapable": "0.2.8", + "uglifyjs-webpack-plugin": "0.4.6", + "watchpack": "1.4.0", + "webpack-sources": "1.1.0", + "yargs": "8.0.2" + }, + "dependencies": { + "ajv": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.1.tgz", + "integrity": "sha1-s4u4h22ehr7plJVqBOch6IskjrI=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + } + } + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.6.0", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "time-stamp": "2.0.0" + } + }, + "webpack-merge": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.1.tgz", + "integrity": "sha512-geQsZ86YkXOVOjvPC5yv3JSNnL6/X3Kzh935AQ/gJNEYXEfJDQFu/sdFuktS9OW2JcH/SJec8TGfRdrpHshH7A==", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "webpack-sources": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", + "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "dev": true, + "requires": { + "source-list-map": "2.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "dev": true, + "requires": { + "http-parser-js": "0.4.9", + "websocket-extensions": "0.1.3" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "whatwg-fetch": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", + "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=", + "dev": true + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "widest-line": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "dev": true, + "requires": { + "string-width": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" + } + }, + "ws": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "dev": true, + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", + "dev": true + }, + "x-is-function": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/x-is-function/-/x-is-function-1.0.4.tgz", + "integrity": "sha1-XSlNw9Joy90GJYDgxd93o5HR+h4=", + "dev": true + }, + "x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", + "dev": true + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.0.3.tgz", + "integrity": "sha512-DqBpQ8NAUX4GyPP/ijDGHsJya4tYqLQrjPr95HNsr1YwL3+daCfvBwg7+gIC6IdJhR2kATh3hb61vjzMWEtjdw==", + "dev": true, + "requires": { + "cliui": "3.2.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "8.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "yargs-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.0.0.tgz", + "integrity": "sha1-IdR2Mw5agieaS4gTRb8GYQLiGcY=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + } +} diff --git a/package.json b/package.json index ecdc456..4a52285 100644 --- a/package.json +++ b/package.json @@ -8,11 +8,11 @@ }, "scripts": { "test": "exit(0)", - "build": "aegir-build --env node", - "lint": "aegir-lint", - "release": "aegir-release --env node", - "release-minor": "aegir-release --env node --type minor", - "release-major": "aegir-release --env node --type major", + "build": "aegir build -t node", + "lint": "aegir lint", + "release": "aegir release -t node", + "release-minor": "aegir release -t node --type minor", + "release-major": "aegir release -t node --type major", "coverage": "exit(0)", "coverage-publish": "exit(0)" }, @@ -32,18 +32,18 @@ }, "homepage": "https://github.com/libp2p/interface-stream-muxer", "dependencies": { - "async": "^2.1.5", - "chai": "^4.0.1", + "async": "^2.6.0", + "chai": "^4.1.2", "chai-checkmark": "^1.0.1", "detect-node": "^2.0.3", - "libp2p-tcp": "~0.9.3", - "multiaddr": "^2.2.2", + "libp2p-tcp": "~0.11.1", + "multiaddr": "^3.0.1", "pull-generate": "^2.2.0", "pull-pair": "^1.1.0", - "pull-stream": "^3.5.0" + "pull-stream": "^3.6.1" }, "devDependencies": { - "aegir": "^11.0.0" + "aegir": "^12.2.0" }, "contributors": [ "David Dias ", diff --git a/src/base-test.js b/src/base-test.js index e0fa8ec..7f50144 100644 --- a/src/base-test.js +++ b/src/base-test.js @@ -112,7 +112,7 @@ module.exports = (common) => { stream, pull.collect((err, chunks) => { expect(err).to.not.exist.mark() - expect(chunks).to.be.eql([Buffer('hey')]).mark() + expect(chunks).to.be.eql([Buffer.from('hey')]).mark() }) ) @@ -132,7 +132,7 @@ module.exports = (common) => { stream, pull.collect((err, chunks) => { expect(err).to.not.exist.mark() - expect(chunks).to.be.eql([Buffer('hello')]).mark() + expect(chunks).to.be.eql([Buffer.from('hello')]).mark() }) ) } diff --git a/src/close-test.js b/src/close-test.js index 8c80d97..a5e6d71 100644 --- a/src/close-test.js +++ b/src/close-test.js @@ -130,7 +130,7 @@ module.exports = (common) => { conns.forEach((conn, i) => { pull( - pull.values([Buffer('hello')]), + pull.values([Buffer.from('hello')]), pull.asyncMap((val, cb) => { setTimeout(() => { cb(null, val) @@ -139,7 +139,7 @@ module.exports = (common) => { conn, pull.collect((err, data) => { expect(err).to.not.exist.mark() - expect(data).to.be.eql([Buffer('hello')]).mark() + expect(data).to.be.eql([Buffer.from('hello')]).mark() }) ) }) From ead2c1c52bc6787e0a14e0bfacb3156311b8babd Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 14 Dec 2017 05:53:10 +0000 Subject: [PATCH 228/337] chore: update contributors --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4a52285..69ab15f 100644 --- a/package.json +++ b/package.json @@ -48,9 +48,10 @@ "contributors": [ "David Dias ", "David Dias ", + "Dmitriy Ryajov ", "Friedel Ziegelmayer ", "Jeffrey Hulten ", - "Victor Bjelkholm ", - "greenkeeperio-bot " + "greenkeeperio-bot ", + "ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ " ] } From 40be9a713163d95c88e213afa9b867cbe38e6e0e Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 14 Dec 2017 05:53:10 +0000 Subject: [PATCH 229/337] chore: release version v0.5.8 --- CHANGELOG.md | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..c40b0d4 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,128 @@ + +## [0.5.8](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.7...v0.5.8) (2017-12-14) + + + + +## [0.5.7](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.6...v0.5.7) (2017-03-16) + + + + +## [0.5.6](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.5...v0.5.6) (2017-02-09) + + + + +## [0.5.5](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.4...v0.5.5) (2017-01-24) + + +### Bug Fixes + +* when things are in the same process, there is a order to them :) ([1635977](https://github.com/libp2p/interface-stream-muxer/commit/1635977)) + + + + +## [0.5.4](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.3...v0.5.4) (2017-01-20) + + +### Bug Fixes + +* avoid making webpacky funky by not trying to inject tcp ([6695b80](https://github.com/libp2p/interface-stream-muxer/commit/6695b80)) + + + + +## [0.5.3](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.2...v0.5.3) (2017-01-19) + + + + +## [0.5.2](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.1...v0.5.2) (2017-01-19) + + + + +## [0.5.1](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.0...v0.5.1) (2017-01-16) + + +### Bug Fixes + +* some fixes for incorrect tests ([23a75d1](https://github.com/libp2p/interface-stream-muxer/commit/23a75d1)) + + + + +# [0.5.0](https://github.com/libp2p/interface-stream-muxer/compare/v0.4.0...v0.5.0) (2016-11-03) + + +### Features + +* move to next aegir ([11980ac](https://github.com/libp2p/interface-stream-muxer/commit/11980ac)) + + + + +# [0.4.0](https://github.com/libp2p/interface-stream-muxer/compare/v0.3.1...v0.4.0) (2016-09-06) + + +### Features + +* **api:** update the interface usage from dial to dialer and listen to listener ([5069679](https://github.com/libp2p/interface-stream-muxer/commit/5069679)) +* **pull:** migration to pull streams. Upgrade tests to use mocha as ([cc3130f](https://github.com/libp2p/interface-stream-muxer/commit/cc3130f)) +* **tests:** add closing tests, make sure errors are propagated ([c06da3b](https://github.com/libp2p/interface-stream-muxer/commit/c06da3b)) +* **tests:** stub test for aegir to verify ([949faf0](https://github.com/libp2p/interface-stream-muxer/commit/949faf0)) + + + + +## [0.3.1](https://github.com/libp2p/interface-stream-muxer/compare/v0.3.0...v0.3.1) (2016-03-06) + + + + +# [0.3.0](https://github.com/libp2p/interface-stream-muxer/compare/v0.2.5...v0.3.0) (2016-03-06) + + + + +## [0.2.5](https://github.com/libp2p/interface-stream-muxer/compare/v0.2.4...v0.2.5) (2015-12-12) + + + + +## [0.2.4](https://github.com/libp2p/interface-stream-muxer/compare/v0.2.3...v0.2.4) (2015-07-22) + + + + +## [0.2.3](https://github.com/libp2p/interface-stream-muxer/compare/v0.2.2...v0.2.3) (2015-07-15) + + + + +## [0.2.2](https://github.com/libp2p/interface-stream-muxer/compare/v0.2.1...v0.2.2) (2015-07-15) + + + + +## [0.2.1](https://github.com/libp2p/interface-stream-muxer/compare/v0.2.0...v0.2.1) (2015-07-14) + + + + +# [0.2.0](https://github.com/libp2p/interface-stream-muxer/compare/v0.1.1...v0.2.0) (2015-07-14) + + + + +## [0.1.1](https://github.com/libp2p/interface-stream-muxer/compare/v0.1.0...v0.1.1) (2015-07-14) + + + + +# 0.1.0 (2015-07-13) + + + diff --git a/package.json b/package.json index 69ab15f..d8b5307 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.5.7", + "version": "0.5.8", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "browser": { From 4f5202485764b11e4118e6180ce624739a931ae3 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 14 Dec 2017 06:02:39 +0000 Subject: [PATCH 230/337] chore: bump timout --- src/stress-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stress-test.js b/src/stress-test.js index f63f305..6a1125e 100644 --- a/src/stress-test.js +++ b/src/stress-test.js @@ -60,7 +60,7 @@ module.exports = (common) => { }) it('1000 streams with 100 msg', function (done) { - this.timeout(10 * 1000) + this.timeout(80 * 1000) spawn(muxer, 1000, 100, done) }) }) From 6d76152b64301849eb8f72f7007248600f5a97a6 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 14 Dec 2017 06:02:51 +0000 Subject: [PATCH 232/337] chore: release version v0.5.9 --- CHANGELOG.md | 5 +++++ package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c40b0d4..57fb519 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ + +## [0.5.9](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.8...v0.5.9) (2017-12-14) + + + ## [0.5.8](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.7...v0.5.8) (2017-12-14) diff --git a/package.json b/package.json index d8b5307..bea1f54 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.5.8", + "version": "0.5.9", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "browser": { From 9c9ea94b27c9d5a66a108a238b3aed33fdfeee6a Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 20 Feb 2018 09:43:48 +0000 Subject: [PATCH 233/337] Initial commit --- .gitignore | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ LICENSE | 21 +++++++++++++++++++ README.md | 2 ++ 3 files changed, 82 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..00cbbdf --- /dev/null +++ b/.gitignore @@ -0,0 +1,59 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3f05397 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 libp2p + +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/README.md b/README.md new file mode 100644 index 0000000..cf296ed --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# interface-content-routing +A test suite and interface you can use to implement a Content Routing for libp2p. From 0c841ede8dfacc10b712c6787f28a50dc36db690 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 20 Feb 2018 09:56:48 +0000 Subject: [PATCH 234/337] docs: update and polish the readme --- README.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 4541803..a2c27c7 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,11 @@ interface-peer-discovery [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io/) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) -[![Travis CI](https://travis-ci.org/ipfs/interface-peer-discovery.svg?branch=master)](https://travis-ci.org/ipfs/interface-peer-discovery) -[![Dependency Status](https://david-dm.org/ipfs/interface-peer-discovery.svg?style=flat-square)](https://david-dm.org/ipfs/interface-peer-discovery) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) -> A test suite and interface you can use to implement a peer discovery mechanism. +> A test suite and interface you can use to implement a Peer Discovery module for libp2p. -The primary goal of this module is to enable developers to pick and swap their stream muxing module as they see fit for their application, without having to go through shims or compatibility issues. This module and test suite was heavily inspired by [abstract-blob-store](https://github.com/maxogden/abstract-blob-store). +The primary goal of this module is to enable developers to pick and/or swap their Peer Discovery modules as they see fit for their application, without having to go through shims or compatibility issues. This module and test suite was heavily inspired by [abstract-blob-store](https://github.com/maxogden/abstract-blob-store). Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. @@ -20,6 +18,9 @@ The API is presented with both Node.js and Go primitives, however, there is not - [JavaScript libp2p-mdns](https://github.com/libp2p/js-libp2p-mdns) - [JavaScript libp2p-railing](https://github.com/libp2p/js-libp2p-railing) +- [JavaScript libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht) +- [JavaScript libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) +- [JavaScript libp2p-websocket-star](https://github.com/libp2p/js-libp2p-websocket-star) Send a PR to add a new one if you happen to find or write one. @@ -53,11 +54,11 @@ test(common) ### Go -> WIP +> WIP - go-libp2p does not have a test suite available for Peer Discovery yet. ## API -A valid (read: that follows this abstraction) stream muxer, must implement the following API. +A valid (read: that follows this abstraction) Peer Discovery module must implement the following API: ### `start` the service From bc661cbdc45d9372fd9ef66959f7367e2a0d6587 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 20 Feb 2018 10:01:51 +0000 Subject: [PATCH 235/337] docs: update and polish the readme --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 63a33a5..3ab524b 100644 --- a/README.md +++ b/README.md @@ -13,13 +13,15 @@ The API is presented with both Node.js and Go primitives, however, there is not # Modules that implement the interface -- https://github.com/libp2p/js-libp2p-kad-routing +- [JavaScript libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht) +- [JavaScript libp2p-delegated-peer-routing](https://github.com/libp2p/js-libp2p-delegated-peer-routing) +- [JavaScript libp2p-kad-routing](https://github.com/libp2p/js-libp2p-kad-routing) # Badge Include this badge in your readme if you make a module that is compatible with the interface-record-store API. You can validate this by running the tests. -![](https://raw.githubusercontent.com/diasdavid/interface-peer-routing/master/img/badge.png) +![](https://raw.githubusercontent.com/libp2p/interface-peer-routing/master/img/badge.png) # How to use the battery of tests @@ -44,13 +46,13 @@ tests(tape, common) ## Go -> WIP +> WIP - The go-libp2p implementation does not have a test suite to be used, yet. # API -A valid (read: that follows this abstraction) stream muxer, must implement the following API. +A valid (read: that follows this abstraction) Peer Routing module must implement the following API. -### Find peers 'responsible' or 'closest' to a given key +### `.findPeers` - Find peers 'responsible' or 'closest' to a given key - `Node.js` peerRouting.findPeers(key, function (err, peersPriorityQueue) {}) From 8a72f17bb9b94d833054592ade5c10342edbebc6 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 20 Feb 2018 11:25:46 +0000 Subject: [PATCH 236/337] first pass on this spec --- LICENSE | 5 ++-- README.md | 64 +++++++++++++++++++++++++++++++++++++++++++-- img/badge.png | Bin 0 -> 5001 bytes img/badge.sketch | Bin 0 -> 181682 bytes img/badge.svg | 25 ++++++++++++++++++ package.json | 22 ++++++++++++++++ tests/base-test.js | 10 +++++++ tests/index.js | 7 +++++ 8 files changed, 129 insertions(+), 4 deletions(-) create mode 100644 img/badge.png create mode 100644 img/badge.sketch create mode 100644 img/badge.svg create mode 100644 package.json create mode 100644 tests/base-test.js create mode 100644 tests/index.js diff --git a/LICENSE b/LICENSE index 3f05397..c6e5dce 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ -MIT License +The MIT License (MIT) -Copyright (c) 2018 libp2p +Copyright (c) 2018 David Dias Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -19,3 +19,4 @@ 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/README.md b/README.md index cf296ed..97c62d8 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,62 @@ -# interface-content-routing -A test suite and interface you can use to implement a Content Routing for libp2p. +interface-content-routing +===================== + +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) +[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) + +> A test suite and interface you can use to implement a Content Routing module for libp2p. + +The primary goal of this module is to enable developers to pick and swap their Content Routing module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by abstract-blob-store and interface-stream-muxer. + +Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. + +The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. + +# Modules that implement the interface + +- [JavaScript libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht) +- [JavaScript libp2p-delegated-peer-routing](https://github.com/libp2p/js-libp2p-delegated-peer-routing) +- [JavaScript libp2p-kad-routing](https://github.com/libp2p/js-libp2p-kad-routing) + +# Badge + +Include this badge in your readme if you make a module that is compatible with the interface-content-routing API. You can validate this by running the tests. + +![](https://raw.githubusercontent.com/libp2p/interface-content-routing/master/img/badge.png) + +# How to use the battery of tests + +## Node.js + +```javascript +var tape = require('tape') +var tests = require('interface-content-routing/tests') +var yourImpl = require('../src') + +var common = { + setup: function (t, cb) { + cb(null, yourImpl) + }, + teardown: function (t, cb) { + cb() + } +} + +tests(tape, common) +``` + +## Go + +> WIP - The go-libp2p implementation does not have a test suite to be used, yet. + +# API + +A valid (read: that follows this abstraction) Peer Routing module must implement the following API. + +### `.findProviders` + +- `JavaScript` peerRouting.findProviders + +### `.provide` + +- `JavaScript` peerRouting.provide diff --git a/img/badge.png b/img/badge.png new file mode 100644 index 0000000000000000000000000000000000000000..07f73279b58e851bf2809016636752921496b0e6 GIT binary patch literal 5001 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 T)EaV300000NkvXXu0mjfPt@3B literal 0 HcmV?d00001 diff --git a/img/badge.sketch b/img/badge.sketch new file mode 100644 index 0000000000000000000000000000000000000000..985a835db67bcf3257a65f280accc40565acaf7f GIT binary patch literal 181682 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 z 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

hvuX{c2)c1i&#C09&mkRc<@X>|o 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�+Ji_kE-{wS_gB_zwKGSOT%7P0 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 IgEz?k0Em2Dpa1{> literal 0 HcmV?d00001 diff --git a/img/badge.svg b/img/badge.svg new file mode 100644 index 0000000..43b16d1 --- /dev/null +++ b/img/badge.svg @@ -0,0 +1,25 @@ + + + + badge + Created with Sketch. + + + + + + + + + + Content Routin + g + + + Compatibl + e + + + + + \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..e5c34a4 --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "interface-content-routing", + "version": "0.0.0", + "description": "A test suite and interface you can use to implement a Content Routing for libp2p.", + "repository": { + "type": "git", + "url": "https://github.com/libp2p/interface-content-routing.git" + }, + "keywords": [ + "IPFS" + ], + "author": "David Dias ", + "license": "MIT", + "bugs": { + "url": "https://github.com/libp2p/interface-content-routing/issues" + }, + "homepage": "https://github.com/libp2p/interface-content-routing", + "devDependencies": {}, + "dependencies": { + "timed-tape": "^0.1.1" + } +} diff --git a/tests/base-test.js b/tests/base-test.js new file mode 100644 index 0000000..3568674 --- /dev/null +++ b/tests/base-test.js @@ -0,0 +1,10 @@ +'use strict' + +module.exports.all = function (test, common) { + test('test', function (t) { + common.setup(test, function (err, pr) { + if (err) {} + common.teardown() + }) + }) +} diff --git a/tests/index.js b/tests/index.js new file mode 100644 index 0000000..3c21b14 --- /dev/null +++ b/tests/index.js @@ -0,0 +1,7 @@ +'use strict' +const timed = require('timed-tape') + +module.exports = function (test, common) { + test = timed(test) + require('./base-test.js').all(test, common) +} From 5b47e193f8868fa9610c13b7c97128d50b239977 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 5 Apr 2018 16:53:39 +0100 Subject: [PATCH 237/337] chore: update all the deps --- package.json | 24 ++++++++++++------------ src/listen-test.js | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 2509d1a..dd9192c 100644 --- a/package.json +++ b/package.json @@ -8,12 +8,12 @@ }, "main": "src/index.js", "scripts": { - "lint": "aegir-lint", - "test": "aegir-test", + "lint": "aegir lint", + "test": "aegir test", "build": "aegir-build", - "release": "aegir-release --env node", - "release-minor": "aegir-release --type minor --env node", - "release-major": "aegir-release --type major --env node", + "release": "aegir release -t node", + "release-minor": "aegir release --type minor -t node", + "release-major": "aegir release --type major -t node", "coverage": "exit(0)", "coverage-publish": "exit(0)" }, @@ -31,15 +31,15 @@ }, "homepage": "https://github.com/libp2p/interface-transport", "devDependencies": { - "aegir": "^11.0.0", - "dirty-chai": "^1.2.2" + "aegir": "^13.0.6", + "dirty-chai": "^2.0.1" }, "dependencies": { - "chai": "^3.5.0", - "multiaddr": "^2.2.2", - "pull-goodbye": "0.0.1", + "chai": "^4.1.2", + "multiaddr": "^4.0.0", + "pull-goodbye": "0.0.2", "pull-serializer": "^0.3.2", - "pull-stream": "^3.5.0" + "pull-stream": "^3.6.7" }, "contributors": [ "David Dias ", @@ -48,4 +48,4 @@ "dmitriy ryajov ", "greenkeeperio-bot " ] -} \ No newline at end of file +} diff --git a/src/listen-test.js b/src/listen-test.js index e43e393..847a89d 100644 --- a/src/listen-test.js +++ b/src/listen-test.js @@ -53,7 +53,7 @@ module.exports = (common) => { ) pull( - pull.values([Buffer('Some data that is never handled')]), + pull.values([Buffer.from('Some data that is never handled')]), socket1, pull.onEnd(() => { finish() From f580b42cf22521ee854ed01e10a534a1cd2de0c9 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 5 Apr 2018 16:54:44 +0100 Subject: [PATCH 239/337] chore: release version v0.3.6 --- CHANGELOG.md | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..ea120b0 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,77 @@ + +## [0.3.6](https://github.com/libp2p/interface-transport/compare/v0.3.5...v0.3.6) (2018-04-05) + + + + +## [0.3.5](https://github.com/libp2p/interface-transport/compare/v0.3.4...v0.3.5) (2017-03-21) + + +### Bug Fixes + +* wrong main path in package.json ([54b83a7](https://github.com/libp2p/interface-transport/commit/54b83a7)) + + + + +## [0.3.4](https://github.com/libp2p/interface-transport/compare/v0.3.3...v0.3.4) (2017-02-09) + + + + +## [0.3.3](https://github.com/libp2p/interface-transport/compare/v0.3.2...v0.3.3) (2016-09-06) + + + + +## [0.3.2](https://github.com/libp2p/interface-transport/compare/v0.3.1...v0.3.2) (2016-09-06) + + +### Bug Fixes + +* **dial-test:** ensure goodbye works over tcp ([e1346da](https://github.com/libp2p/interface-transport/commit/e1346da)) + + + + +## [0.3.1](https://github.com/libp2p/interface-transport/compare/v0.3.0...v0.3.1) (2016-09-05) + + +### Bug Fixes + +* **package.json:** point to right main ([ace6150](https://github.com/libp2p/interface-transport/commit/ace6150)) + + + + +# [0.3.0](https://github.com/libp2p/interface-transport/compare/v0.2.0...v0.3.0) (2016-09-05) + + +### Bug Fixes + +* **tests:** add place holder test script for releases ([8e9f7cf](https://github.com/libp2p/interface-transport/commit/8e9f7cf)) + + +### Features + +* **dialer:** remove conn from on connect callback ([1bd20d9](https://github.com/libp2p/interface-transport/commit/1bd20d9)) +* **spec:** update the dial interface to cope with new pull additions ([2e12166](https://github.com/libp2p/interface-transport/commit/2e12166)) +* **tests:** add dial and listen tests ([d50224d](https://github.com/libp2p/interface-transport/commit/d50224d)) + + + + +# [0.2.0](https://github.com/libp2p/interface-transport/compare/v0.1.1...v0.2.0) (2016-06-16) + + + + +## [0.1.1](https://github.com/libp2p/interface-transport/compare/v0.1.0...v0.1.1) (2015-12-12) + + + + +# 0.1.0 (2015-09-17) + + + diff --git a/package.json b/package.json index dd9192c..743138a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.3.5", + "version": "0.3.6", "description": "A test suite and interface you can use to implement a transport.", "repository": { "type": "git", From 6ac58f7745fe2ae35c412686e3d650c8867a9aa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Santos?= Date: Tue, 29 May 2018 23:19:00 +0100 Subject: [PATCH 240/337] docs: minor typo fix minor typo fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e995384..cf1a15a 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Publishing a test suite as a module lets multiple modules all ensure compatibili The purpose of this interface is not to reinvent any wheels when it comes to dialing and listening to transports. Instead, it tries to uniform several transports through a shimmed interface. -The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. +The API is presented with both Node.js and Go primitives, however, there are no actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. # Modules that implement the interface From 305ec4eb4b514498dd1a705a648a3972f4990a5c Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Wed, 6 Jun 2018 18:05:18 +1000 Subject: [PATCH 241/337] Fix IPRS URL again --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2c98a18..462d60e 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ interface-record-store [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) -> A test suite and interface you can use to implement a a [IPRS compliant](https://github.com/ipfs/specs/tree/master/iprs) Record Store. +> A test suite and interface you can use to implement a a [IPRS compliant](/IPRS.md) Record Store. The primary goal of this module is to enable developers to pick and swap their Record Store module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by [`abstract-blob-store`](https://github.com/maxogden/abstract-blob-store) and [`interface-stream-muxer`](https://github.com/libp2p/interface-stream-muxer). From a82b230511822158f13b628e8166042d32b6cb03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Kr=C3=BCger?= Date: Thu, 14 Jun 2018 09:56:13 +0200 Subject: [PATCH 242/337] misc: fix url for protocol labs badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e995384..a79eedb 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ interface-transport =================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) > A test suite and interface you can use to implement a libp2p transport. A libp2p transport is understood as something that offers a dial and listen interface. From 3c82be8421120cc35ea9d9c576ac32e80b5a7afa Mon Sep 17 00:00:00 2001 From: James Ray <16969914+jamesray1@users.noreply.github.com> Date: Mon, 25 Jun 2018 21:06:39 +1000 Subject: [PATCH 243/337] Grammar fixes (#25) --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 730bf4d..6a2e31a 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,13 @@ interface-connection ![](https://img.shields.io/badge/npm-%3E%3D3.0.0-orange.svg?style=flat-square) ![](https://img.shields.io/badge/Node.js-%3E%3D4.0.0-orange.svg?style=flat-square) -> A test suite and interface you can use to implement a connection. A connection is understood as something that offers mechanism for writing and reading data, back pressure, half and full duplex streams. This module and test suite were heavily inspired by abstract-blob-store and interface-stream-muxer. +This is a test suite and interface you can use to implement a connection. A connection is understood as something that offers mechanism for writing and reading data, back pressure, half and full duplex streams. This module and test suite were heavily inspired by abstract-blob-store and interface-stream-muxer. -The primary goal of module is to enable developers to pick, swap or upgrade their connection without loosing the same API expectations and mechanisms such as back pressure and the hability to half close a connection. +The primary goal of this module is to enable developers to pick, swap or upgrade their connection without losing the same API expectations and mechanisms such as back pressure and the ability to half close a connection. Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. -The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. +The API is presented with both Node.js and Go primitives, however, there is no actual limitations for it to be extended to any other language, pushing forward the cross compatibility and interop through diferent stacks. # Modules that implement the interface From f8569f2586e2fd6e556d088d1368ccd9c6f6660e Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 13 Jul 2018 17:22:57 +0200 Subject: [PATCH 244/337] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a0de266..4a2f138 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ The API is presented with both Node.js and Go primitives, however, there is not ## Modules that implement the interface - [JavaScript libp2p-spdy](https://github.com/libp2p/js-libp2p-spdy) +- [JavaScript libp2p-mplex](https://github.com/libp2p/js-libp2p-mplex) - [Go spdy, muxado, yamux and multiplex](https://github.com/jbenet/go-stream-muxer) Send a PR to add a new one if you happen to find or write one. @@ -73,7 +74,6 @@ If `err` is passed, no operation should be made in `conn`. ### Dial(open/create) a new stream - - `JavaScript` stream = muxedConn.newStream([function (err, stream)]) - `Go` stream, err := muxedConn.newStream() From 7c08472afe32d04fdebbddad30b8f6f101bc5473 Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Wed, 31 Oct 2018 10:32:56 +0000 Subject: [PATCH 245/337] docs: add lead-maintainer --- README.md | 4 ++++ package.json | 1 + 2 files changed, 5 insertions(+) diff --git a/README.md b/README.md index 97c62d8..13a9949 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,10 @@ Publishing a test suite as a module lets multiple modules all ensure compatibili The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. +## Lead Maintainer + +[Vasco Santos](https://github.com/vasco-santos). + # Modules that implement the interface - [JavaScript libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht) diff --git a/package.json b/package.json index e5c34a4..0ff2db9 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "interface-content-routing", "version": "0.0.0", "description": "A test suite and interface you can use to implement a Content Routing for libp2p.", + "leadMaintainer": "Vasco Santos ", "repository": { "type": "git", "url": "https://github.com/libp2p/interface-content-routing.git" From afc24e9137571d6b051e92f2cc5ce94708ca78ec Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Wed, 31 Oct 2018 13:49:01 +0000 Subject: [PATCH 246/337] docs: add lead-maintainer --- README.md | 4 ++++ package.json | 1 + 2 files changed, 5 insertions(+) diff --git a/README.md b/README.md index 462d60e..dc86aa0 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,10 @@ Publishing a test suite as a module lets multiple modules all ensure compatibili The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. +## Lead Maintainer + +[Vasco Santos](https://github.com/vasco-santos). + # Modules that implement the interface - [ipfs-distributed-record-store](https://github.com/libp2p/js-libp2p-distributed-record-store) diff --git a/package.json b/package.json index d8de813..8c1f85e 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "interface-record-store", "version": "0.1.3", "description": "A test suite and interface you can use to implement a a IPRS compliant(https://github.com/ipfs/specs/tree/master/records) Record Store", + "leadMaintainer": "Vasco Santos ", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, From 121981cafc22f19902db65ed89109791aa11b1f0 Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Wed, 31 Oct 2018 13:41:51 +0000 Subject: [PATCH 247/337] docs: add lead-maintainer --- README.md | 4 ++++ package.json | 1 + 2 files changed, 5 insertions(+) diff --git a/README.md b/README.md index 3ab524b..5556d58 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,10 @@ Publishing a test suite as a module lets multiple modules all ensure compatibili The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. +## Lead Maintainer + +[Vasco Santos](https://github.com/vasco-santos). + # Modules that implement the interface - [JavaScript libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht) diff --git a/package.json b/package.json index 63b16ed..dd0926a 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "interface-peer-routing", "version": "0.1.3", "description": "A test suite and interface you can use to implement a Peer Routing for libp2p.", + "leadMaintainer": "Vasco Santos ", "repository": { "type": "git", "url": "https://github.com/diasdavid/interface-peer-routing.git" From 4fba00b7b1e3928ac46644b4959e80a49922cadc Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Wed, 31 Oct 2018 13:36:33 +0000 Subject: [PATCH 248/337] docs: add lead-maintainer --- README.md | 4 ++++ package.json | 1 + 2 files changed, 5 insertions(+) diff --git a/README.md b/README.md index a2c27c7..073adb1 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,10 @@ Publishing a test suite as a module lets multiple modules all ensure compatibili The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. +## Lead Maintainer + +[Vasco Santos](https://github.com/vasco-santos). + ## Modules that implement the interface - [JavaScript libp2p-mdns](https://github.com/libp2p/js-libp2p-mdns) diff --git a/package.json b/package.json index 18c2060..1b7f8d9 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "interface-discovery", "version": "0.0.2", "description": "A test suite and interface you can use to implement a discovery interface.", + "leadMaintainer": "Vasco Santos ", "main": "src/index.js", "scripts": { "lint": "aegir-lint", From d9c868195a55d817fa53c19013ac7dce4048d02e Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 9 Nov 2018 13:21:43 +0100 Subject: [PATCH 249/337] fix: improve the close test --- src/close-test.js | 50 ++++++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/src/close-test.js b/src/close-test.js index a5e6d71..b4df80e 100644 --- a/src/close-test.js +++ b/src/close-test.js @@ -35,8 +35,6 @@ module.exports = (common) => { }) it('closing underlying socket closes streams (tcp)', (done) => { - expect(2).checks(done) - const tcp = new Tcp() const tcpListener = tcp.createListener((conn) => { const listener = muxer.listener(conn) @@ -45,26 +43,38 @@ module.exports = (common) => { }) }) - tcpListener.listen(mh, () => { - const dialerConn = tcp.dial(mh, tcpListener.close) - - const dialerMuxer = muxer.dialer(dialerConn) - const s1 = dialerMuxer.newStream(() => { - pull( - s1, - pull.onEnd((err) => { - expect(err).to.exist.mark() - }) - ) + // Wait for the streams to open + expect(2).checks(() => { + // Once everything is closed, we're done + expect(3).checks(done) + tcpListener.close((err) => { + expect(err).to.not.exist.mark() }) + }) - const s2 = dialerMuxer.newStream(() => { - pull( - s2, - pull.onEnd((err) => { - expect(err).to.exist.mark() - }) - ) + tcpListener.listen(mh, () => { + const dialerConn = tcp.dial(mh, () => { + + const dialerMuxer = muxer.dialer(dialerConn) + const s1 = dialerMuxer.newStream((err) => { + expect(err).to.not.exist.mark() + pull( + s1, + pull.onEnd((err) => { + expect(err).to.exist.mark() + }) + ) + }) + + const s2 = dialerMuxer.newStream((err) => { + expect(err).to.not.exist.mark() + pull( + s2, + pull.onEnd((err) => { + expect(err).to.exist.mark() + }) + ) + }) }) }) }) From e43827e224ba3dbe0540fdfbf5b5f39fd5ff4e23 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 9 Nov 2018 13:39:44 +0100 Subject: [PATCH 250/337] chore: update deps and fix linting chore: make npm scripts cross platform friendly --- package-lock.json | 15365 ++++++++++++++++++++++++++------------------ package.json | 21 +- src/close-test.js | 1 - src/spawner.js | 1 + 4 files changed, 9084 insertions(+), 6304 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6c05609..6e78313 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,126 +1,1679 @@ { "name": "interface-stream-muxer", - "version": "0.5.7", + "version": "0.5.9", "lockfileVersion": 1, "requires": true, "dependencies": { - "JSONStream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", - "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "@babel/cli": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.1.2.tgz", + "integrity": "sha512-K3WDlpBPGpoW11SLKFEBhMsITomPovsrZ/wnM3y+WStbytukDXC0OBic3yQp+j058QUw0+R/jfx2obwp1fOzcA==", "dev": true, "requires": { - "jsonparse": "1.3.1", - "through": "2.3.8" + "chokidar": "^2.0.3", + "commander": "^2.8.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.0.0", + "lodash": "^4.17.10", + "mkdirp": "^0.5.1", + "output-file-sync": "^2.0.0", + "slash": "^2.0.0", + "source-map": "^0.5.0" } }, - "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", "dev": true, "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" + "@babel/highlight": "^7.0.0" } }, - "acorn": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", - "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", - "dev": true - }, - "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "@babel/core": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.1.2.tgz", + "integrity": "sha512-IFeSSnjXdhDaoysIlev//UzHZbdEmm7D0EIH2qtse9xK7mXEZQpYjs2P00XlP1qYsYvid79p+Zgg6tz1mp6iVw==", "dev": true, "requires": { - "acorn": "4.0.13" + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.1.2", + "@babel/helpers": "^7.1.2", + "@babel/parser": "^7.1.2", + "@babel/template": "^7.1.2", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.1.2", + "convert-source-map": "^1.1.0", + "debug": "^3.1.0", + "json5": "^0.5.0", + "lodash": "^4.17.10", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" }, "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true } } }, + "@babel/generator": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.1.5.tgz", + "integrity": "sha512-IO31r62xfMI+wBJVmgx0JR9ZOHty8HkoYpQAjRWUGG9vykBTlGHdArZ8zoFtpUu2gs17K7qTl/TtPpiSi6t+MA==", + "dev": true, + "requires": { + "@babel/types": "^7.1.5", + "jsesc": "^2.5.1", + "lodash": "^4.17.10", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", + "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", + "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-builder-react-jsx": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz", + "integrity": "sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "esutils": "^2.0.0" + } + }, + "@babel/helper-call-delegate": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz", + "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.0.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-define-map": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", + "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/types": "^7.0.0", + "lodash": "^4.17.10" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", + "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz", + "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", + "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz", + "integrity": "sha512-0JZRd2yhawo79Rcm4w0LwSMILFmFXjugG3yqf+P/UsKsRS1mJCmMwwlHDlMg7Avr9LrvSpp4ZSULO9r8jpCzcw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0", + "lodash": "^4.17.10" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", + "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", + "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", + "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-wrap-function": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz", + "integrity": "sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", + "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "dev": true, + "requires": { + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", + "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-wrap-function": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz", + "integrity": "sha512-R6HU3dete+rwsdAfrOzTlE9Mcpk4RjU3aX3gi9grtmugQY0u79X7eogUvfXA5sI81Mfq1cn6AgxihfN33STjJA==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helpers": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.1.5.tgz", + "integrity": "sha512-2jkcdL02ywNBry1YNFAH/fViq4fXG0vdckHqeJk+75fpQ2OH+Az6076tX/M0835zA45E0Cqa6pV5Kiv9YOqjEg==", + "dev": true, + "requires": { + "@babel/template": "^7.1.2", + "@babel/traverse": "^7.1.5", + "@babel/types": "^7.1.5" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.1.5.tgz", + "integrity": "sha512-WXKf5K5HT6X0kKiCOezJZFljsfxKV1FpU8Tf1A7ZpGvyd/Q4hlrJm2EwoH2onaUq3O4tLDp+4gk0hHPsMyxmOg==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.1.0.tgz", + "integrity": "sha512-Fq803F3Jcxo20MXUSDdmZZXrPe6BWyGcWBPPNB/M7WaUYESKDeKMOGIxEzQOjGSmW/NWb6UaPZrtTB2ekhB/ew==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0", + "@babel/plugin-syntax-async-generators": "^7.0.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.1.0.tgz", + "integrity": "sha512-/PCJWN+CKt5v1xcGn4vnuu13QDoV+P7NcICP44BoonAJoPSGwVkgrXihFIQGiEjjPlUDBIw1cM7wYFLARS2/hw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.1.0", + "@babel/plugin-syntax-class-properties": "^7.0.0" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.1.2.tgz", + "integrity": "sha512-YooynBO6PmBgHvAd0fl5e5Tq/a0pEC6RqF62ouafme8FzdIVH41Mz/u1dn8fFVm4jzEJ+g/MsOxouwybJPuP8Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/plugin-syntax-decorators": "^7.1.0" + } + }, + "@babel/plugin-proposal-do-expressions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-do-expressions/-/plugin-proposal-do-expressions-7.0.0.tgz", + "integrity": "sha512-fIXsLAsQ5gVhQF44wZ9Yc3EBxaCHzeNjd8z9ivEzKOQyv5VoU1YJQ3AZa0VJgQMX5k/cbXJpNwp2mtg7iSdiGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-do-expressions": "^7.0.0" + } + }, + "@babel/plugin-proposal-export-default-from": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.0.0.tgz", + "integrity": "sha512-cWhkx6SyjZ4caFOanoPmDNgQCuYYTmou4QXy886JsyLTw/vhWQbop2gLKsWyyswrJkKTB7fSNxVYbP/oEsoySA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.0.0.tgz", + "integrity": "sha512-UZuK8lkobh3570vCu0sxDQn+ZlCV6CVLlXe+nNohvPr6/zI5I+j4Ir2fTTCG0ayBQanym0N+29K5+v4c8SATaQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-export-namespace-from": "^7.0.0" + } + }, + "@babel/plugin-proposal-function-bind": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.0.0.tgz", + "integrity": "sha512-CNLspFXoquetQqPTFRedMvF7VYpsY2IecFu7Gcb86w+70lXojIKHhX1QFt5dhyk5n4MsjKrdXlGipbCFqD0Xeg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-function-bind": "^7.0.0" + } + }, + "@babel/plugin-proposal-function-sent": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.1.0.tgz", + "integrity": "sha512-yciM4dketj0pjd1enirzfVWclzSCzjOljHx8E4DJUBq/q65CuaKsX2zhpdImzcn6TtFupzdcuchbqN00IEKDAA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-wrap-function": "^7.1.0", + "@babel/plugin-syntax-function-sent": "^7.0.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz", + "integrity": "sha512-kfVdUkIAGJIVmHmtS/40i/fg/AGnw/rsZBCaapY5yjeO5RA9m165Xbw9KMOu2nqXP5dTFjEjHdfNdoVcHv133Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.0.0" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.0.0.tgz", + "integrity": "sha512-06osaVN0bKEIXvzScf6qPpbDUEP4sixqVdjwpSPPwEtMyDC+x8PDvcJCww6p6TDOTIHnuUx2Afmguf/RypKDIw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.0.0" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.0.0.tgz", + "integrity": "sha512-QIN3UFo1ul4ruAsjIqK43PeXedo1qY74zeGrODJl1KfCGeMc6qJC4rb5Ylml/smzxibqsDeVZGH+TmWHCldRQQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.0.0.tgz", + "integrity": "sha512-m4iDNpbBv2rTxxgViAeaqLOStc2wrlVAC5ifp6pjBPG29F56LdlPgf5CQYzj99y3kYeKqsyf/dcMx/r+QfwMZg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-numeric-separator": "^7.0.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz", + "integrity": "sha512-14fhfoPcNu7itSen7Py1iGN0gEm87hX/B+8nZPqkdmANyyYWYMY2pjA3r8WXbWVKMzfnSNS0xY8GVS0IjXi/iw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz", + "integrity": "sha512-JPqAvLG1s13B/AuoBjdBYvn38RqW6n1TzrQO839/sIpqLpbnXKacsAgpZHzLD83Sm8SDXMkkrAvEnJ25+0yIpw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.0.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.0.0.tgz", + "integrity": "sha512-7x8HLa71OzNiofbQUVakS0Kmg++6a+cXNfS7QKHbbv03SuSaumJyaWsfNgw+T7aqrJlqurYpZqrkPgXu0iZK0w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0" + } + }, + "@babel/plugin-proposal-pipeline-operator": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-pipeline-operator/-/plugin-proposal-pipeline-operator-7.0.0.tgz", + "integrity": "sha512-MN189PDyTMoor/YFh9dk6HpSZLMGHCXRdAhgmzshwcalbgYh5Mkn7Ib17lOo6fmLwHdyQ4GR4yagizfeR2LwQQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-pipeline-operator": "^7.0.0" + } + }, + "@babel/plugin-proposal-throw-expressions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.0.0.tgz", + "integrity": "sha512-CA2EUiwnbXrsdV4hy3jYghm91WaL7zL7xYfu628dyItRr6gylbRxshghGEK/Hhm//rR58N3PBmEeuYqSW57IUQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-throw-expressions": "^7.0.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0.tgz", + "integrity": "sha512-tM3icA6GhC3ch2SkmSxv7J/hCWKISzwycub6eGsDrFDgukD4dZ/I+x81XgW0YslS6mzNuQ1Cbzh5osjIMgepPQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.2.0" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0.tgz", + "integrity": "sha512-im7ged00ddGKAjcZgewXmp1vxSZQQywuQXe2B1A7kajjZmDeY/ekMPmWr9zJgveSaQH0k7BcGrojQhcK06l0zA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.0.0.tgz", + "integrity": "sha512-cR12g0Qzn4sgkjrbrzWy2GE7m9vMl/sFkqZ3gIpAQdrvPDnLM8180i+ANDFIXfjHo9aqp0ccJlQ0QNZcFUbf9w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.1.0.tgz", + "integrity": "sha512-uQvRSbgQ0nQg3jsmIixXXDCgSpkBolJ9X7NYThMKCcjvE8dN2uWJUzTUNNAeuKOjARTd+wUQV0ztXpgunZYKzQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-do-expressions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-do-expressions/-/plugin-syntax-do-expressions-7.0.0.tgz", + "integrity": "sha512-ZN5MO2WuYfznTK0/TRlF9qG+pBGV/bY5CRO9/a00XEGvaU31JAewRbYaZrySDw6kwSdtPG76yk9jZdPrEC3jWg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0.tgz", + "integrity": "sha512-Gt9xNyRrCHCiyX/ZxDGOcBnlJl0I3IWicpZRC4CdC0P5a/I07Ya2OAMEBU+J7GmRFVmIetqEYRko6QYRuKOESw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-export-default-from": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.0.0.tgz", + "integrity": "sha512-HNnjg/fFFbnuLAqr/Ocp1Y3GB4AjmXcu1xxn3ql3bS2kGrB/qi+Povshb8i3hOkE5jNozzh8r/0/lq1w8oOWbQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.0.0.tgz", + "integrity": "sha512-l314XT1eMa0MWboSmG4BdKukHfSpSpQRenUoZmEpL6hqc5nc1/ddpLETjPB77gZE1dZ9qxy5D3U3UUjjcX2d4g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.0.0.tgz", + "integrity": "sha512-zGcuZWiWWDa5qTZ6iAnpG0fnX/GOu49pGR5PFvkQ9GmKNaSphXQnlNXh/LG20sqWtNrx/eB6krzfEzcwvUyeFA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-function-bind": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.0.0.tgz", + "integrity": "sha512-dGxXCBMhRgdoJdTDouuC5sTRqZihfm4bKTWCJOXpTknZnmb1AozdvoNQA8V1WCccwk0IGKr0LaCbsQDQNp48JA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-function-sent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.0.0.tgz", + "integrity": "sha512-j+D8C+clbieA+1UFlRzMkVozWNLB94TCJsUUE7OCyKBRM329ZZXnFPjgm0em5ddLsKV9DNpdtaOZsNZ1J7gHyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.0.0.tgz", + "integrity": "sha512-FEoGvhXVAiWzpDjyZIlBGzKyNk/lnRPy7aPke3PjVkiAY0QFsvFfkjUg5diRwVfowBA8SJqvFt0ZoXNSjl70hQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz", + "integrity": "sha512-UlSfNydC+XLj4bw7ijpldc1uZ/HB84vw+U6BTuqMdIEmz/LDe63w/GHtpQMdXWdqQZFeAI9PjnHe/vDhwirhKA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0.tgz", + "integrity": "sha512-PdmL2AoPsCLWxhIr3kG2+F9v4WH06Q3z+NoGVpQgnUNGcagXHq5sB3OXxkSahKq9TLdNMN/AJzFYSOo8UKDMHg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.0.0.tgz", + "integrity": "sha512-eOcVPYWpdReMfxHZIBRjC5wlB8iU7kM6eQyst0kK6SwUPmpYNKyB4rJdf0HTeUEOSRqdlH6uMiLAzReA0qDGLQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.0.0.tgz", + "integrity": "sha512-oAJmMsAvTSIk9y0sZdU2S/nY44PEUuHN7EzNDMgbuR4e/OwyfR9lSmoBJBZ2lslFZIqhksrTt4i+av7uKfNYDw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.0.0.tgz", + "integrity": "sha512-t9RMUPWsFXVeUZxEOhIDkVqYLi1sWOTjxFBAp8wJtaARilvkGlEQvSObd2W5YKicDktINI9XmdV0sB2FZaLOpw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz", + "integrity": "sha512-5A0n4p6bIiVe5OvQPxBnesezsgFJdHhSs3uFSvaPdMqtsovajLZ+G2vZyvNe10EzJBWWo3AcHGKhAFUxqwp2dw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz", + "integrity": "sha512-Wc+HVvwjcq5qBg1w5RG9o9RVzmCaAg/Vp0erHCKpAYV8La6I94o4GQAmFYNmkzoMO6gzoOSulpKeSSz6mPEoZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.0.0.tgz", + "integrity": "sha512-QXedQsZf8yua1nNrXSePT0TsGSQH9A1iK08m9dhCMdZeJaaxYcQfXdgHWVV6Cp7WE/afPVvSKIsAHK5wP+yxDA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-pipeline-operator": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-pipeline-operator/-/plugin-syntax-pipeline-operator-7.0.0.tgz", + "integrity": "sha512-McK1JV4klGq2r0UZ1SLE2u+u37ElArBcPMGl6JizdgEXD3ttp0dpOB5ZpqpeRHkIgnl46th64UHrFDteQ4P5aw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-throw-expressions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.0.0.tgz", + "integrity": "sha512-/5uORdWlPta/ALhI5zKtm0Y9vAYOa7HJMML0OnCGk9XZA4hpGjb0Xjt/OVDCJVawC/4FrlAGCHOaj9BtWeVDvg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz", + "integrity": "sha512-2EZDBl1WIO/q4DIkIp4s86sdp4ZifL51MoIviLY/gG/mLSuOIEg7J8o6mhbxOTvUJkaN50n+8u41FVsr5KLy/w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.1.0.tgz", + "integrity": "sha512-rNmcmoQ78IrvNCIt/R9U+cixUHeYAzgusTFgIAv+wQb9HJU4szhpDD6e5GCACmj/JP5KxuCwM96bX3L9v4ZN/g==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz", + "integrity": "sha512-AOBiyUp7vYTqz2Jibe1UaAWL0Hl9JUXEgjFvvvcSc9MVDItv46ViXFw2F7SVt1B5k+KWjl44eeXOAk3UDEaJjQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.1.5.tgz", + "integrity": "sha512-jlYcDrz+5ayWC7mxgpn1Wj8zj0mmjCT2w0mPIMSwO926eXBRxpEgoN/uQVRBfjtr8ayjcmS+xk2G1jaP8JjMJQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.10" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz", + "integrity": "sha512-rNaqoD+4OCBZjM7VaskladgqnZ1LO6o2UxuWSDzljzW21pN1KXkB7BstAVweZdxQkHAujps5QMNOTWesBciKFg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-define-map": "^7.1.0", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz", + "integrity": "sha512-ubouZdChNAv4AAWAgU7QKbB93NU5sHwInEWfp+/OzJKA02E6Woh9RVoX4sZrbRwtybky/d7baTUqwFx+HgbvMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.3.tgz", + "integrity": "sha512-Mb9M4DGIOspH1ExHOUnn2UUXFOyVTiX84fXCd+6B5iWrQg/QMeeRmSwpZ9lnjYLSXtZwiw80ytVMr3zue0ucYw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0.tgz", + "integrity": "sha512-00THs8eJxOJUFVx1w8i1MBF4XH4PsAjKjQ1eqN/uCH3YKwP21GCKfrn6YZFZswbOk9+0cw1zGQPHVc1KBlSxig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.1.3" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0.tgz", + "integrity": "sha512-w2vfPkMqRkdxx+C71ATLJG30PpwtTpW7DDdLqYt2acXU7YjztzeWW2Jk1T6hKqCLYCcEA5UQM/+xTAm+QCSnuQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.1.0.tgz", + "integrity": "sha512-uZt9kD1Pp/JubkukOGQml9tqAeI8NkE98oZnHZ2qHRElmeKCodbTZgOEUtujSCSLhHSBWbzNiFSDIMC4/RBTLQ==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.0.0.tgz", + "integrity": "sha512-WhXUNb4It5a19RsgKKbQPrjmy4yWOY1KynpEbNw7bnd1QTcrT/EIl3MJvnGgpgvrKyKbqX7nUNOJfkpLOnoDKA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz", + "integrity": "sha512-TlxKecN20X2tt2UEr2LNE6aqA0oPeMT1Y3cgz8k4Dn1j5ObT8M3nl9aA37LLklx0PBZKETC9ZAf9n/6SujTuXA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.1.0.tgz", + "integrity": "sha512-VxOa1TMlFMtqPW2IDYZQaHsFrq/dDoIjgN098NowhexhZcz3UGlvPgZXuE1jEvNygyWyxRacqDpCZt+par1FNg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz", + "integrity": "sha512-1NTDBWkeNXgpUcyoVFxbr9hS57EpZYXpje92zv0SUzjdu3enaRwF/l3cmyRnXLtIdyJASyiS6PtybK+CgKf7jA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.1.0.tgz", + "integrity": "sha512-wt8P+xQ85rrnGNr2x1iV3DW32W8zrB6ctuBkYBbf5/ZzJY99Ob4MFgsZDFgczNU76iy9PWsy4EuxOliDjdKw6A==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.1.0.tgz", + "integrity": "sha512-wtNwtMjn1XGwM0AXPspQgvmE6msSJP15CX2RVfpTSTNPLhKhaOjaIfBaVfj4iUZ/VrFSodcFedwtPg/NxwQlPA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.1.3.tgz", + "integrity": "sha512-PvTxgjxQAq4pvVUZF3mD5gEtVDuId8NtWkJsZLEJZMZAW3TvgQl1pmydLLN1bM8huHFVVU43lf0uvjQj9FRkKw==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.1.0.tgz", + "integrity": "sha512-enrRtn5TfRhMmbRwm7F8qOj0qEYByqUvTttPEGimcBH4CJHphjyK1Vg7sdU7JjeEmgSpM890IT/efS2nMHwYig==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz", + "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.1.0.tgz", + "integrity": "sha512-/O02Je1CRTSk2SSJaq0xjwQ8hG4zhZGNjE8psTsSNPXyLRCODv7/PBozqT5AmQMzp7MI3ndvMhGdqp9c96tTEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.1.0" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.1.0.tgz", + "integrity": "sha512-vHV7oxkEJ8IHxTfRr3hNGzV446GAb+0hgbA7o/0Jd76s+YzccdWuTU296FOCOl/xweU4t/Ya4g41yWz80RFCRw==", + "dev": true, + "requires": { + "@babel/helper-call-delegate": "^7.1.0", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz", + "integrity": "sha512-BX8xKuQTO0HzINxT6j/GiCwoJB0AOMs0HmLbEnAvcte8U8rSkNa/eSCAY+l1OA4JnCVq2jw2p6U8QQryy2fTPg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0.tgz", + "integrity": "sha512-0TMP21hXsSUjIQJmu/r7RiVxeFrXRcMUigbKu0BLegJK9PkYodHstaszcig7zxXfaBji2LYUdtqIkHs+hgYkJQ==", + "dev": true, + "requires": { + "@babel/helper-builder-react-jsx": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.0.0.tgz", + "integrity": "sha512-pymy+AK12WO4safW1HmBpwagUQRl9cevNX+82AIAtU1pIdugqcH+nuYP03Ja6B+N4gliAaKWAegIBL/ymALPHA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.0.0.tgz", + "integrity": "sha512-OSeEpFJEH5dw/TtxTg4nijl4nHBbhqbKL94Xo/Y17WKIf2qJWeIk/QeXACF19lG1vMezkxqruwnTjVizaW7u7w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz", + "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==", + "dev": true, + "requires": { + "regenerator-transform": "^0.13.3" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.1.0.tgz", + "integrity": "sha512-WFLMgzu5DLQEah0lKTJzYb14vd6UiES7PTnXcvrPZ1VrwFeJ+mTbvr65fFAsXYMt2bIoOoC0jk76zY1S7HZjUg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "resolve": "^1.8.1", + "semver": "^5.5.1" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz", + "integrity": "sha512-g/99LI4vm5iOf5r1Gdxq5Xmu91zvjhEG5+yZDJW268AZELAu4J1EiFLnkSG3yuUsZyOipVOVUKoGPYwfsTymhw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz", + "integrity": "sha512-L702YFy2EvirrR4shTj0g2xQp7aNwZoWNCkNu2mcoU0uyzMl0XRwDSwzB/xp6DSUFiBmEXuyAyEN16LsgVqGGQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz", + "integrity": "sha512-LFUToxiyS/WD+XEWpkx/XJBrUXKewSZpzX68s+yEOtIbdnsRjpryDw9U06gYc6klYEij/+KQVRnD3nz3AoKmjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz", + "integrity": "sha512-vA6rkTCabRZu7Nbl9DfLZE1imj4tzdWcg5vtdQGvj+OH9itNNB6hxuRMHuIY8SGnEt1T9g5foqs9LnrHzsqEFg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0.tgz", + "integrity": "sha512-1r1X5DO78WnaAIvs5uC48t41LLckxsYklJrZjNKcevyz83sF2l4RHbw29qrCPr/6ksFsdfRpT/ZgxNWHXRnffg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz", + "integrity": "sha512-uJBrJhBOEa3D033P95nPHu3nbFwFE9ZgXsfEitzoIXIwqAZWk7uXcg06yFKXz9FSxBH5ucgU/cYdX0IV8ldHKw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.1.3" + } + }, + "@babel/preset-env": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.1.0.tgz", + "integrity": "sha512-ZLVSynfAoDHB/34A17/JCZbyrzbQj59QC1Anyueb4Bwjh373nVPq5/HMph0z+tCmcDjXDe+DlKQq9ywQuvWrQg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.1.0", + "@babel/plugin-proposal-json-strings": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.0.0", + "@babel/plugin-syntax-async-generators": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.1.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.1.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-dotall-regex": "^7.0.0", + "@babel/plugin-transform-duplicate-keys": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.1.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.1.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-amd": "^7.1.0", + "@babel/plugin-transform-modules-commonjs": "^7.1.0", + "@babel/plugin-transform-modules-systemjs": "^7.0.0", + "@babel/plugin-transform-modules-umd": "^7.1.0", + "@babel/plugin-transform-new-target": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.1.0", + "@babel/plugin-transform-parameters": "^7.1.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typeof-symbol": "^7.0.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "browserslist": "^4.1.0", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.3.0" + } + }, + "@babel/preset-flow": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.0.0.tgz", + "integrity": "sha512-bJOHrYOPqJZCkPVbG1Lot2r5OSsB+iUOaxiHdlOeB1yPWS6evswVHwvkDLZ54WTaTRIk89ds0iHmGZSnxlPejQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0" + } + }, + "@babel/preset-react": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", + "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0" + } + }, + "@babel/preset-stage-0": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/preset-stage-0/-/preset-stage-0-7.0.0.tgz", + "integrity": "sha512-FBMd0IiARPtH5aaOFUVki6evHiJQiY0pFy7fizyRF7dtwc+el3nwpzvhb9qBNzceG1OIJModG1xpE0DDFjPXwA==", + "dev": true + }, + "@babel/register": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.0.0.tgz", + "integrity": "sha512-f/+CRmaCe7rVEvcvPvxeA8j5aJhHC3aJie7YuqcMDhUOuyWLA7J/aNrTaHIzoWPEhpHA54mec4Mm8fv8KBlv3g==", + "dev": true, + "requires": { + "core-js": "^2.5.7", + "find-cache-dir": "^1.0.0", + "home-or-tmp": "^3.0.0", + "lodash": "^4.17.10", + "mkdirp": "^0.5.1", + "pirates": "^4.0.0", + "source-map-support": "^0.5.9" + } + }, + "@babel/runtime": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.2.tgz", + "integrity": "sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "@babel/template": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.1.2.tgz", + "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.1.2", + "@babel/types": "^7.1.2" + } + }, + "@babel/traverse": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.5.tgz", + "integrity": "sha512-eU6XokWypl0MVJo+MTSPUtlfPePkrqsF26O+l1qFGlCKWwmiYAYy2Sy44Qw8m2u/LbPCsxYt90rghmqhYMGpPA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.1.5", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/parser": "^7.1.5", + "@babel/types": "^7.1.5", + "debug": "^3.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.10" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.5.tgz", + "integrity": "sha512-sJeqa/d9eM/bax8Ivg+fXF7FpN3E/ZmTrWbkk6r+g7biVYfALMnLin4dKijsaqEhpd2xvOGfQTkQkD31YCVV4A==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.10", + "to-fast-properties": "^2.0.0" + } + }, + "@commitlint/config-conventional": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-7.1.2.tgz", + "integrity": "sha512-DmA4ixkpv03qA1TVs1Bl25QsVym2bPL6pKapesALWIVggG3OpwqGZ55vN75Tx8xZoG7LFKrVyrt7kwhA7X8njQ==", + "dev": true + }, + "@commitlint/ensure": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-7.2.0.tgz", + "integrity": "sha512-j2AJE4eDeLP6O/Z1CdPwEXAzcrRRoeeHLuvW8bldQ4J2nHiX9hzmSe87H87Ob8Avm+zIegsqVPGaBAtRmbODYw==", + "dev": true, + "requires": { + "lodash.camelcase": "4.3.0", + "lodash.kebabcase": "4.1.1", + "lodash.snakecase": "4.1.1", + "lodash.startcase": "4.4.0", + "lodash.upperfirst": "4.3.1" + } + }, + "@commitlint/execute-rule": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-7.1.2.tgz", + "integrity": "sha512-EP/SqX2U2L4AQHglZ2vGM1pvHJOh3sbYtHn1QhtllqEpsdmhuNpVPSGHP/r9OD2h4i90vtnWgZQoskt2MkbknA==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "@commitlint/is-ignored": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-7.2.1.tgz", + "integrity": "sha512-3DsEEKRnj8Bv9qImsxWcGf9BwerDnk5Vs+oK6ELzIwkndHaAZLHyATjmaz/rsc+U+DWiVjgKrrw3xvd/UsoazA==", + "dev": true, + "requires": { + "semver": "5.6.0" + } + }, + "@commitlint/lint": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-7.2.1.tgz", + "integrity": "sha512-rM7nUyNUJyuKw1MTwJG/wk4twB5YCAG2wzJMn5NqVpGD/qmLOzlZoBl0+CYmuOsbIRAA2rlEV6KZHBk9tTfAdQ==", + "dev": true, + "requires": { + "@commitlint/is-ignored": "^7.2.1", + "@commitlint/parse": "^7.1.2", + "@commitlint/rules": "^7.2.0", + "babel-runtime": "^6.23.0", + "lodash.topairs": "4.3.0" + } + }, + "@commitlint/load": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-7.2.1.tgz", + "integrity": "sha512-FnfmfhPGJqGwILVRznduBejOicNey6p/byfcyxtcBkN2+X96gDuNtqcnGcngCrzPIAgaIrQQcTQDA1/KMtW21A==", + "dev": true, + "requires": { + "@commitlint/execute-rule": "^7.1.2", + "@commitlint/resolve-extends": "^7.1.2", + "babel-runtime": "^6.23.0", + "cosmiconfig": "^4.0.0", + "lodash.merge": "4.6.1", + "lodash.mergewith": "4.6.1", + "lodash.pick": "4.4.0", + "lodash.topairs": "4.3.0", + "resolve-from": "4.0.0" + } + }, + "@commitlint/message": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-7.1.2.tgz", + "integrity": "sha512-6FQeK5LAs1Bde6W/jULg+I/XZhj3gbqCWlS2Q11A2JbaTRpRJZzm7WdD9nK3I0+De41EOqW2t4mBnrpio3o1Zg==", + "dev": true + }, + "@commitlint/parse": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-7.1.2.tgz", + "integrity": "sha512-wrdLwJZL3cs89MfgPtnbbKByijUo3Wrug55aTke5k/F0XNxGaDaNJyH4QXgidgXk57r2t4NJVAKwjnY4wjfNwg==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^1.3.3", + "conventional-commits-parser": "^2.1.0" + } + }, + "@commitlint/read": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-7.1.2.tgz", + "integrity": "sha512-sarYQgfTay2Eu7onHz53EYyRw7pI5QmLE7tP5Ri9op6eu4LadjSoA/4dfc+VE7avsq21J2ewSbz+9f0uvhDxgg==", + "dev": true, + "requires": { + "@commitlint/top-level": "^7.1.2", + "@marionebl/sander": "^0.6.0", + "babel-runtime": "^6.23.0", + "git-raw-commits": "^1.3.0" + } + }, + "@commitlint/resolve-extends": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-7.1.2.tgz", + "integrity": "sha512-zwbifMB9DeHP4sYQdrkx+XJh5Q1lyP/OdlErUCC34NV4Lkxw/XxXF4St3e+y1X28/SgrEc2XSOS6n/vQQfUlLA==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "lodash.merge": "4.6.1", + "lodash.omit": "4.5.0", + "require-uncached": "^1.0.3", + "resolve-from": "^4.0.0", + "resolve-global": "^0.1.0" + } + }, + "@commitlint/rules": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-7.2.0.tgz", + "integrity": "sha512-c15Q9H5iYE9fnncLnFnMuvPLYA/i0pve5moV0uxJJGr4GgJoBKyldd4CCDhoE80C1k8ABuqr2o2qsopzVEp3Ww==", + "dev": true, + "requires": { + "@commitlint/ensure": "^7.2.0", + "@commitlint/message": "^7.1.2", + "@commitlint/to-lines": "^7.1.2", + "babel-runtime": "^6.23.0" + } + }, + "@commitlint/to-lines": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-7.1.2.tgz", + "integrity": "sha512-Nz3qZwrIEYiN9v/ThJqXAwu4X5+hvT9H8yRPHfjc538R8WhwEfhvym7/4YznDHSvWrQgwqtNPdrb6b2OSBsHmg==", + "dev": true + }, + "@commitlint/top-level": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-7.1.2.tgz", + "integrity": "sha512-YKugOAKy3hgM/ITezPp7Ns51U3xoJfuOsVnMGW4oDcHLhuQ/Qd58ROv/Hgedtk8HugKX3DdZ8XoEnRG70RDGqQ==", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "@marionebl/sander": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@marionebl/sander/-/sander-0.6.1.tgz", + "integrity": "sha1-GViWWHTyS8Ub5Ih1/rUNZC/EH3s=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2" + } + }, + "@samverschueren/stream-to-observable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", + "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", + "dev": true, + "requires": { + "any-observable": "^0.3.0" + } + }, + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", + "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", + "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", + "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", + "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", + "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.7.11" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", + "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", + "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", + "dev": true + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", + "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", + "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", + "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", + "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.1" + } + }, + "@webassemblyjs/utf8": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", + "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", + "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/helper-wasm-section": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-opt": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "@webassemblyjs/wast-printer": "1.7.11" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", + "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", + "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", + "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", + "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/floating-point-hex-parser": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-code-frame": "1.7.11", + "@webassemblyjs/helper-fsm": "1.7.11", + "@xtuc/long": "4.2.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", + "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11", + "@xtuc/long": "4.2.1" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", + "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", + "dev": true, + "requires": { + "acorn": "^5.0.0" + } + }, "acorn-jsx": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "3.3.0" + "acorn": "^3.0.4" }, "dependencies": { "acorn": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", "dev": true } } }, "aegir": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/aegir/-/aegir-12.2.0.tgz", - "integrity": "sha512-KCko6i7rfkSC+ZvCwqBnzEZL4UtzgpnRkr/iSl52trUrojCLiJSknO63XzBGP2EDIEUMUquEbosQ9/bookE5Bw==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/aegir/-/aegir-17.0.1.tgz", + "integrity": "sha512-g5zIVUSJ89oJty7kqktfSvtX0U4Nv+kPxitW7tzRteqPLC8UZ91Qbqs5HxAog4tC13CtKg/Odg84ylwEWAatcw==", "dev": true, "requires": { - "async": "2.6.0", - "browserify-zlib": "0.2.0", - "chalk": "2.3.0", - "clean-documentation-theme": "0.5.2", - "codecov": "3.0.0", - "conventional-changelog": "1.1.7", - "conventional-github-releaser": "1.1.13", - "coveralls": "3.0.0", - "detect-node": "2.0.3", - "documentation": "5.3.5", - "es6-promisify": "5.0.0", - "eslint": "4.13.1", - "eslint-config-aegir": "1.0.1", - "execa": "0.8.0", - "filesize": "3.5.11", - "findup-sync": "2.0.0", - "fs-extra": "4.0.3", - "gh-pages": "1.1.0", - "glob": "7.1.2", - "joi": "13.0.2", - "json-loader": "0.5.7", - "karma": "1.7.1", - "karma-chrome-launcher": "2.2.0", - "karma-firefox-launcher": "1.1.0", - "karma-mocha": "1.3.0", + "@babel/cli": "7.1.2", + "@babel/core": "7.1.2", + "@babel/plugin-transform-regenerator": "7.0.0", + "@babel/plugin-transform-runtime": "7.1.0", + "@babel/preset-env": "7.1.0", + "@babel/register": "7.0.0", + "@babel/runtime": "7.1.2", + "@commitlint/config-conventional": "^7.1.2", + "@commitlint/lint": "^7.2.1", + "@commitlint/load": "^7.2.1", + "@commitlint/read": "^7.1.2", + "arrify": "^1.0.1", + "async": "^2.6.1", + "babel-loader": "8.0.4", + "babel-plugin-transform-flow-comments": "^6.22.0", + "browserify-zlib": "~0.2.0", + "chalk": "^2.4.1", + "clean-documentation-theme": "~0.5.2", + "codecov": "^3.1.0", + "conventional-changelog": "^1.1.7", + "conventional-github-releaser": "^2.0.0", + "del": "^3.0.0", + "detect-node": "^2.0.4", + "documentation": "^9.0.0-alpha.1", + "es6-promisify": "^6.0.1", + "eslint": "^4.19.0", + "eslint-config-standard": "^11.0.0", + "eslint-plugin-import": "^2.14.0", + "eslint-plugin-node": "^6.0.1", + "eslint-plugin-promise": "^3.8.0", + "eslint-plugin-standard": "^3.1.0", + "execa": "^1.0.0", + "filesize": "^3.6.1", + "findup-sync": "^2.0.0", + "fs-extra": "^7.0.0", + "gh-pages": "^2.0.1", + "git-validate": "^2.2.4", + "glob": "^7.1.3", + "joi": "^14.0.1", + "json-loader": "~0.5.7", + "karma": "^3.1.1", + "karma-chrome-launcher": "^2.2.0", + "karma-cli": "^1.0.1", + "karma-edge-launcher": "~0.4.2", + "karma-firefox-launcher": "^1.1.0", + "karma-junit-reporter": "^1.2.0", + "karma-mocha": "^1.3.0", "karma-mocha-own-reporter": "git+https://github.com/dryajov/karma-mocha-own-reporter.git#d562a92a12d5c76469a05d67cee19bcb8db22b23", - "karma-mocha-webworker": "1.3.0", - "karma-sourcemap-loader": "0.3.7", - "karma-webpack": "2.0.7", - "listr": "0.13.0", - "listr-update-renderer": "0.4.0", - "listr-verbose-renderer": "0.4.1", - "lodash": "4.17.4", - "mocha": "4.0.1", - "npm-which": "3.0.1", - "nyc": "11.3.0", - "p-map": "1.2.0", - "pify": "3.0.0", - "pretty-hrtime": "1.0.3", - "rimraf": "2.6.2", - "safe-buffer": "5.1.1", - "semver": "5.4.1", - "simple-git": "1.85.0", - "stream-http": "2.7.2", - "through": "2.3.8", - "transform-loader": "0.2.4", - "uglify-es": "3.2.2", - "update-notifier": "2.3.0", - "webpack": "3.10.0", - "webpack-merge": "4.1.1", - "yargs": "10.0.3" + "karma-mocha-webworker": "^1.3.0", + "karma-sourcemap-loader": "~0.3.7", + "karma-webpack": "v4.0.0-beta.0", + "listr": "~0.14.2", + "listr-verbose-renderer": "~0.4.1", + "lodash": "^4.17.11", + "mocha": "^5.2.0", + "mocha-jenkins-reporter": "~0.4.1", + "npm-which": "^3.0.1", + "nyc": "^13.1.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "pretty-hrtime": "^1.0.3", + "prompt-promise": "^1.0.3", + "read-pkg-up": "^4.0.0", + "resolve-bin": "~0.4.0", + "rimraf": "^2.6.2", + "semver": "^5.6.0", + "simple-git": "^1.105.0", + "stats-webpack-plugin": "~0.7.0", + "stream-http": "^3.0.0", + "through": "^2.3.8", + "transform-loader": "~0.2.4", + "uglify-es": "^3.3.9", + "update-notifier": "^2.5.0", + "webpack": "^4.23.1", + "webpack-bundle-analyzer": "^3.0.3", + "webpack-cli": "^3.1.2", + "webpack-merge": "^4.1.4", + "yargs": "^12.0.2", + "yargs-parser": "^11.0.0" + }, + "dependencies": { + "karma-cli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-1.0.1.tgz", + "integrity": "sha1-rmw8WKMTodALRRZMRVubhs4X+WA=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + } } }, "after": { @@ -130,13 +1683,15 @@ "dev": true }, "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", + "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", "dev": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-keywords": { @@ -145,30 +1700,13 @@ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", "dev": true }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, "ansi-align": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "dev": true, "requires": { - "string-width": "2.1.1" + "string-width": "^2.0.0" }, "dependencies": { "ansi-regex": { @@ -189,8 +1727,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -199,15 +1737,21 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } }, + "ansi-colors": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.1.tgz", + "integrity": "sha512-Xt+zb6nqgvV9SWAVp0EG3lRsHcbq5DDgqjPPz6pwgtj6RKz65zGXMNa82oJfOSBA/to6GmRP7Dr+6o+kbApTzQ==", + "dev": true + }, "ansi-escapes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", - "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", + "version": "3.1.0", + "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", "dev": true }, "ansi-html": { @@ -223,51 +1767,28 @@ "dev": true }, "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "any-observable": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.2.0.tgz", - "integrity": "sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", + "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", "dev": true }, "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" - }, - "dependencies": { - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - } - } + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "append-buffer": { @@ -276,16 +1797,22 @@ "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", "dev": true, "requires": { - "buffer-equal": "1.0.0" + "buffer-equal": "^1.0.0" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" }, "dependencies": { "sprintf-js": { @@ -303,13 +1830,10 @@ "dev": true }, "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, "arr-flatten": { "version": "1.1.0", @@ -335,18 +1859,18 @@ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, "array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", "dev": true }, - "array-iterate": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-1.1.1.tgz", - "integrity": "sha1-hlv3+K851rCYLGCQKRSsdrwBCPY=", - "dev": true - }, "array-slice": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", @@ -359,7 +1883,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -369,15 +1893,15 @@ "dev": true }, "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", "dev": true }, "arrify": { @@ -393,20 +1917,23 @@ "dev": true }, "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "asn1.js": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", - "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -416,25 +1943,48 @@ "dev": true, "requires": { "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } } }, "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, "assertion-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", - "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true }, "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "requires": { - "lodash": "4.17.4" + "lodash": "^4.17.10" } }, "async-each": { @@ -443,6 +1993,12 @@ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -450,21 +2006,21 @@ "dev": true }, "atob": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", - "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", "dev": true }, "babel-code-frame": { @@ -473,9 +2029,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" }, "dependencies": { "ansi-styles": { @@ -486,17 +2042,23 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "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" } }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -506,46 +2068,62 @@ } }, "babel-core": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", - "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.0", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.1", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + }, + "dependencies": { + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + } } }, "babel-generator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", - "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + } } }, "babel-helper-bindify-decorators": { @@ -554,9 +2132,9 @@ "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-builder-binary-assignment-operator-visitor": { @@ -565,9 +2143,9 @@ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-builder-react-jsx": { @@ -576,9 +2154,9 @@ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "esutils": "2.0.2" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "esutils": "^2.0.2" } }, "babel-helper-call-delegate": { @@ -587,10 +2165,10 @@ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-define-map": { @@ -599,10 +2177,10 @@ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-explode-assignable-expression": { @@ -611,9 +2189,9 @@ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-explode-class": { @@ -622,10 +2200,10 @@ "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", "dev": true, "requires": { - "babel-helper-bindify-decorators": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-bindify-decorators": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-function-name": { @@ -634,11 +2212,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { @@ -647,8 +2225,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-hoist-variables": { @@ -657,8 +2235,8 @@ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-optimise-call-expression": { @@ -667,8 +2245,8 @@ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-regex": { @@ -677,9 +2255,9 @@ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-remap-async-to-generator": { @@ -688,11 +2266,11 @@ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-replace-supers": { @@ -701,12 +2279,12 @@ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helpers": { @@ -715,8 +2293,20 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-loader": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.4.tgz", + "integrity": "sha512-fhBhNkUToJcW9nV46v8w87AJOwAJDz84c1CL57n3Stj73FANM/b9TbCUK4YhdOwEyZ+OxhYpdeZDNzSI29Firw==", + "dev": true, + "requires": { + "find-cache-dir": "^1.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "util.promisify": "^1.0.0" } }, "babel-messages": { @@ -725,7 +2315,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-check-es2015-constants": { @@ -734,84 +2324,84 @@ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-syntax-async-functions": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", "dev": true }, "babel-plugin-syntax-async-generators": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", "dev": true }, "babel-plugin-syntax-class-constructor-call": { "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", "dev": true }, "babel-plugin-syntax-class-properties": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", "dev": true }, "babel-plugin-syntax-decorators": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", "dev": true }, "babel-plugin-syntax-do-expressions": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz", "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=", "dev": true }, "babel-plugin-syntax-dynamic-import": { "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", "dev": true }, "babel-plugin-syntax-exponentiation-operator": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", "dev": true }, "babel-plugin-syntax-export-extensions": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", "dev": true }, "babel-plugin-syntax-flow": { "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", "dev": true }, "babel-plugin-syntax-function-bind": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz", "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=", "dev": true }, "babel-plugin-syntax-jsx": { "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", "dev": true }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", "dev": true }, @@ -827,7 +2417,7 @@ "integrity": "sha1-038Mro5h7zkGAggzHZMbXmMNfF8=", "dev": true, "requires": { - "babel-plugin-syntax-dynamic-import": "6.18.0" + "babel-plugin-syntax-dynamic-import": "^6.18.0" } }, "babel-plugin-transform-async-generator-functions": { @@ -836,9 +2426,9 @@ "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-generators": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-generators": "^6.5.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-async-to-generator": { @@ -847,9 +2437,9 @@ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-class-constructor-call": { @@ -858,9 +2448,9 @@ "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", "dev": true, "requires": { - "babel-plugin-syntax-class-constructor-call": "6.18.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-syntax-class-constructor-call": "^6.18.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-class-properties": { @@ -869,10 +2459,10 @@ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-plugin-syntax-class-properties": "^6.8.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-decorators": { @@ -881,22 +2471,22 @@ "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", "dev": true, "requires": { - "babel-helper-explode-class": "6.24.1", - "babel-plugin-syntax-decorators": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-class": "^6.24.1", + "babel-plugin-syntax-decorators": "^6.13.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-decorators-legacy": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz", - "integrity": "sha1-dBtY9sW86eYCfgiC2cmU8E82aSU=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz", + "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==", "dev": true, "requires": { - "babel-plugin-syntax-decorators": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-syntax-decorators": "^6.1.18", + "babel-runtime": "^6.2.0", + "babel-template": "^6.3.0" } }, "babel-plugin-transform-do-expressions": { @@ -905,8 +2495,8 @@ "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", "dev": true, "requires": { - "babel-plugin-syntax-do-expressions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-do-expressions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -915,7 +2505,7 @@ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -924,7 +2514,7 @@ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -933,11 +2523,11 @@ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-plugin-transform-es2015-classes": { @@ -946,15 +2536,15 @@ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-computed-properties": { @@ -963,8 +2553,8 @@ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-destructuring": { @@ -973,7 +2563,7 @@ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -982,8 +2572,8 @@ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-for-of": { @@ -992,7 +2582,7 @@ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -1001,9 +2591,9 @@ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-literals": { @@ -1012,7 +2602,7 @@ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -1021,21 +2611,21 @@ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", - "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" } }, "babel-plugin-transform-es2015-modules-systemjs": { @@ -1044,9 +2634,9 @@ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-umd": { @@ -1055,9 +2645,9 @@ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-object-super": { @@ -1066,8 +2656,8 @@ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -1076,12 +2666,12 @@ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-shorthand-properties": { @@ -1090,8 +2680,8 @@ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-spread": { @@ -1100,7 +2690,7 @@ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -1109,9 +2699,9 @@ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-template-literals": { @@ -1120,7 +2710,7 @@ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -1129,7 +2719,7 @@ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -1138,9 +2728,43 @@ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + } } }, "babel-plugin-transform-exponentiation-operator": { @@ -1149,9 +2773,9 @@ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-export-extensions": { @@ -1160,8 +2784,18 @@ "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", "dev": true, "requires": { - "babel-plugin-syntax-export-extensions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-export-extensions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-flow-comments": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-comments/-/babel-plugin-transform-flow-comments-6.22.0.tgz", + "integrity": "sha1-jZSREy8rSKvQZW+Wwg87vW/BdSk=", + "dev": true, + "requires": { + "babel-plugin-syntax-flow": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-flow-strip-types": { @@ -1170,8 +2804,8 @@ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", "dev": true, "requires": { - "babel-plugin-syntax-flow": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-flow": "^6.18.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-function-bind": { @@ -1180,8 +2814,8 @@ "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", "dev": true, "requires": { - "babel-plugin-syntax-function-bind": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-function-bind": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-inline-imports-commonjs": { @@ -1190,8 +2824,8 @@ "integrity": "sha1-IMfRkrr8VMhyc4bjOH2O5O8Z5qU=", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "builtin-modules": "1.1.1" + "babel-plugin-transform-strict-mode": "^6.8.0", + "builtin-modules": "^1.1.1" } }, "babel-plugin-transform-object-rest-spread": { @@ -1200,8 +2834,8 @@ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-object-rest-spread": "^6.8.0", + "babel-runtime": "^6.26.0" } }, "babel-plugin-transform-react-display-name": { @@ -1210,7 +2844,7 @@ "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-react-jsx": { @@ -1219,9 +2853,9 @@ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", "dev": true, "requires": { - "babel-helper-builder-react-jsx": "6.26.0", - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "babel-helper-builder-react-jsx": "^6.24.1", + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-react-jsx-self": { @@ -1230,8 +2864,8 @@ "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-react-jsx-source": { @@ -1240,8 +2874,8 @@ "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-regenerator": { @@ -1250,7 +2884,20 @@ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "requires": { - "regenerator-transform": "0.10.1" + "regenerator-transform": "^0.10.0" + }, + "dependencies": { + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + } } }, "babel-plugin-transform-strict-mode": { @@ -1259,46 +2906,58 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-preset-env": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", - "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "2.10.0", - "invariant": "2.2.2", - "semver": "5.4.1" + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + }, + "dependencies": { + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + } } }, "babel-preset-flow": { @@ -1307,7 +2966,7 @@ "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", "dev": true, "requires": { - "babel-plugin-transform-flow-strip-types": "6.22.0" + "babel-plugin-transform-flow-strip-types": "^6.22.0" } }, "babel-preset-react": { @@ -1316,12 +2975,12 @@ "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-plugin-transform-react-display-name": "6.25.0", - "babel-plugin-transform-react-jsx": "6.24.1", - "babel-plugin-transform-react-jsx-self": "6.22.0", - "babel-plugin-transform-react-jsx-source": "6.22.0", - "babel-preset-flow": "6.23.0" + "babel-plugin-syntax-jsx": "^6.3.13", + "babel-plugin-transform-react-display-name": "^6.23.0", + "babel-plugin-transform-react-jsx": "^6.24.1", + "babel-plugin-transform-react-jsx-self": "^6.22.0", + "babel-plugin-transform-react-jsx-source": "^6.22.0", + "babel-preset-flow": "^6.23.0" } }, "babel-preset-stage-0": { @@ -1330,9 +2989,9 @@ "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", "dev": true, "requires": { - "babel-plugin-transform-do-expressions": "6.22.0", - "babel-plugin-transform-function-bind": "6.22.0", - "babel-preset-stage-1": "6.24.1" + "babel-plugin-transform-do-expressions": "^6.22.0", + "babel-plugin-transform-function-bind": "^6.22.0", + "babel-preset-stage-1": "^6.24.1" } }, "babel-preset-stage-1": { @@ -1341,9 +3000,9 @@ "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", "dev": true, "requires": { - "babel-plugin-transform-class-constructor-call": "6.24.1", - "babel-plugin-transform-export-extensions": "6.22.0", - "babel-preset-stage-2": "6.24.1" + "babel-plugin-transform-class-constructor-call": "^6.24.1", + "babel-plugin-transform-export-extensions": "^6.22.0", + "babel-preset-stage-2": "^6.24.1" } }, "babel-preset-stage-2": { @@ -1352,10 +3011,10 @@ "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", "dev": true, "requires": { - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-decorators": "6.24.1", - "babel-preset-stage-3": "6.24.1" + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-decorators": "^6.24.1", + "babel-preset-stage-3": "^6.24.1" } }, "babel-preset-stage-3": { @@ -1364,11 +3023,11 @@ "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", "dev": true, "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-generator-functions": "6.24.1", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-object-rest-spread": "6.26.0" + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-generator-functions": "^6.24.1", + "babel-plugin-transform-async-to-generator": "^6.24.1", + "babel-plugin-transform-exponentiation-operator": "^6.24.1", + "babel-plugin-transform-object-rest-spread": "^6.22.0" } }, "babel-register": { @@ -1377,13 +3036,34 @@ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "requires": { - "babel-core": "6.26.0", - "babel-runtime": "6.26.0", - "core-js": "2.5.3", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + }, + "dependencies": { + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + } } }, "babel-runtime": { @@ -1392,8 +3072,16 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.3", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } } }, "babel-template": { @@ -1402,11 +3090,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -1415,15 +3103,23 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + } } }, "babel-types": { @@ -1432,10 +3128,18 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + } } }, "babelify": { @@ -1457,9 +3161,9 @@ "dev": true }, "bail": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.2.tgz", - "integrity": "sha1-99bBcxYwqfnw1NNe0fli4gdKF2Q=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", + "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==", "dev": true }, "balanced-match": { @@ -1474,29 +3178,61 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.5", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.0", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, "base-x": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.3.tgz", - "integrity": "sha512-qKXPTB94LxXhJs8hqwTdyVTiDXMFTRUFj5F7FnWOW19ALCfANf2lHHUnEcY43g3DaVi4X8E2oDCkHIN8bjr32Q==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.5.tgz", + "integrity": "sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "base64-arraybuffer": { @@ -1506,9 +3242,9 @@ "dev": true }, "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", "dev": true }, "base64id": { @@ -1517,20 +3253,13 @@ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", "dev": true }, - "base64url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", - "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=", - "dev": true - }, "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, - "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "better-assert": { @@ -1542,6 +3271,18 @@ "callsite": "1.0.0" } }, + "bfj": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz", + "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "check-types": "^7.3.0", + "hoopy": "^0.1.2", + "tryer": "^1.0.0" + } + }, "big.js": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", @@ -1549,21 +3290,21 @@ "dev": true }, "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", + "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", "dev": true }, "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", "dev": true }, "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", "dev": true }, "bn.js": { @@ -1578,28 +3319,28 @@ "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", "dev": true, "requires": { - "continuable-cache": "0.3.1", - "error": "7.0.2", - "raw-body": "1.1.7", - "safe-json-parse": "1.0.1" + "continuable-cache": "^0.3.1", + "error": "^7.0.0", + "raw-body": "~1.1.0", + "safe-json-parse": "~1.0.1" } }, "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.1", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.15" + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" }, "dependencies": { "bytes": { @@ -1608,33 +3349,33 @@ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "dev": true }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", "dev": true, "requires": { "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", "unpipe": "1.0.0" } } } }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, "bowser": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.8.1.tgz", - "integrity": "sha512-NMPaR8ILtdLSWzxQtEs16XbxMcY8ohWGQ5V+TZSJS3fNUt/PBAGkF6YWO9B/4qWE23bK3o0moQKq8UyFEosYkA==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz", + "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==", "dev": true }, "boxen": { @@ -1643,13 +3384,13 @@ "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", "dev": true, "requires": { - "ansi-align": "2.0.0", - "camelcase": "4.1.0", - "chalk": "2.3.0", - "cli-boxes": "1.0.0", - "string-width": "2.1.1", - "term-size": "1.2.0", - "widest-line": "2.0.0" + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" }, "dependencies": { "ansi-regex": { @@ -1670,8 +3411,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -1680,30 +3421,48 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } }, "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "brorand": { @@ -1713,9 +3472,9 @@ "dev": true }, "browser-resolve": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", - "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", "dev": true, "requires": { "resolve": "1.1.7" @@ -1736,49 +3495,50 @@ "dev": true }, "browserify-aes": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", - "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "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": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.1.1", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.5" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -1787,13 +3547,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.0" + "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": { @@ -1802,17 +3562,18 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.6" + "pako": "~1.0.5" } }, "browserslist": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.10.0.tgz", - "integrity": "sha512-WyvzSLsuAVPOjbljXnyeWl14Ae+ukAT8MUuagKVzIDvwBxl4UAwD1xqtyQs2eWYPGUKMeC3Ol62goqYuKqTTcw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.4.tgz", + "integrity": "sha512-u5iz+ijIMUlmV8blX82VGFrB9ecnUg5qEt55CMZ/YJEhha+d8qpBfOFuutJ6F/VKRXjZoD33b6uvarpPxcl3RA==", "dev": true, "requires": { - "caniuse-lite": "1.0.30000783", - "electron-to-chromium": "1.3.28" + "caniuse-lite": "^1.0.30000899", + "electron-to-chromium": "^1.3.82", + "node-releases": "^1.0.1" } }, "bs58": { @@ -1820,26 +3581,54 @@ "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", "requires": { - "base-x": "3.0.3" + "base-x": "^3.0.2" } }, "buffer": { "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, "buffer-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", "dev": true }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, "buffer-shims": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", @@ -1870,38 +3659,125 @@ "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", "dev": true }, + "cacache": { + "version": "10.0.4", + "resolved": "http://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + }, + "dependencies": { + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + } + } + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "dev": true, + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" }, "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", "dev": true + }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + } + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "query-string": { + "version": "5.1.1", + "resolved": "http://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } } } }, + "cached-path-relative": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", + "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", + "dev": true + }, "caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "0.2.0" + "callsites": "^0.2.0" } }, "callsite": { @@ -1923,33 +3799,26 @@ "dev": true }, "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", "dev": true, "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" } }, "caniuse-lite": { - "version": "1.0.30000783", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000783.tgz", - "integrity": "sha1-m1SZ+xtQPSNF0SqmuGEoUvQnb/0=", + "version": "1.0.30000907", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000907.tgz", + "integrity": "sha512-No5sQ/OB2Nmka8MNOOM6nJx+Hxt6MQ6h7t7kgJFu9oTuwjykyKRSBP/+i/QAyFHxeHB+ddE0Da1CG5ihx9oehQ==", "dev": true }, "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", "dev": true }, "caseless": { @@ -1959,40 +3828,22 @@ "dev": true }, "ccount": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.2.tgz", - "integrity": "sha1-U7ai+BW7d7nChx97mnLDol8djok=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz", + "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==", "dev": true }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - }, - "dependencies": { - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - } - } - }, "chai": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", - "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", "requires": { - "assertion-error": "1.0.2", - "check-error": "1.0.2", - "deep-eql": "3.0.1", - "get-func-name": "2.0.0", - "pathval": "1.1.0", - "type-detect": "4.0.5" + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" } }, "chai-checkmark": { @@ -2001,38 +3852,38 @@ "integrity": "sha1-n7s8mtkQHwl+8ogyjTD0In10//s=" }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "character-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.1.tgz", - "integrity": "sha1-92hxvl72bdt/j440eOzDdMJ9bco=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", + "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==", "dev": true }, "character-entities-html4": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.1.tgz", - "integrity": "sha1-NZoqSg9+KdPcKsmb2+Ie45Q46lA=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz", + "integrity": "sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==", "dev": true }, "character-entities-legacy": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.1.tgz", - "integrity": "sha1-9Ad53xoQGHK7UQo9KV4fzPFHIC8=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", + "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==", "dev": true }, "character-reference-invalid": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz", - "integrity": "sha1-lCg191Dk7GGjCOYMLvjMEBEgLvw=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", + "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==", "dev": true }, "chardet": { @@ -2046,31 +3897,62 @@ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" }, + "check-types": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", + "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==", + "dev": true + }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "dev": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.3", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" } }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", + "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "circular-json": { @@ -2079,17 +3961,21 @@ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", "dev": true }, + "class-is": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", + "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" + }, "class-utils": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.5.tgz", - "integrity": "sha1-F+eTEDdQ+WJ7IXbqNM/RtWWQPIA=", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "lazy-cache": "2.0.2", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -2098,31 +3984,8 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, @@ -2132,22 +3995,254 @@ "integrity": "sha512-I57pY8V/TM76QsWDu6y+cb2GqyrRW3L9VLfMTHQaXqbmuqn2Jslf4mJc5di9GkOnLYErvCJnD1g69XRS69yN4g==", "dev": true, "requires": { - "babel-plugin-transform-inline-imports-commonjs": "1.2.0", - "concat-stream": "1.6.0", - "documentation": "5.3.5", - "documentation-theme-utils": "3.0.0", - "github-slugger": "1.2.0", - "highlight.js": "9.12.0", - "lodash": "4.17.4", - "prop-types": "15.6.0", - "radium": "0.19.6", - "radium-bootstrap-grid": "0.1.8", - "react": "15.6.2", - "react-dom": "15.6.2", - "react-icons": "2.2.7", - "react-pure-render": "1.0.2", - "vinyl": "2.1.0", - "vinyl-fs": "2.4.4" + "babel-plugin-transform-inline-imports-commonjs": "^1.2.0", + "concat-stream": "^1.6.0", + "documentation": "^5.3.0", + "documentation-theme-utils": "^3.0.0", + "github-slugger": "^1.1.3", + "highlight.js": "^9.12.0", + "lodash": "^4.17.4", + "prop-types": "^15.5.10", + "radium": "^0.19.4", + "radium-bootstrap-grid": "^0.1.8", + "react": "^15.6.1", + "react-dom": "^15.6.1", + "react-icons": "^2.2.5", + "react-pure-render": "^1.0.2", + "vinyl": "^2.1.0", + "vinyl-fs": "^2.4.4" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "documentation": { + "version": "5.5.0", + "resolved": "http://registry.npmjs.org/documentation/-/documentation-5.5.0.tgz", + "integrity": "sha512-Aod3HOI+8zMhwWztDlECRsDfJ8SFu4oADvipOLq3gnWKy4Cpg2oF5AWT+U6PcX85KuguDI6c+q+2YwYEx99B/A==", + "dev": true, + "requires": { + "ansi-html": "^0.0.7", + "babel-core": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-plugin-system-import-transformer": "3.1.0", + "babel-plugin-transform-decorators-legacy": "^1.3.4", + "babel-preset-env": "^1.6.1", + "babel-preset-react": "^6.24.1", + "babel-preset-stage-0": "^6.24.1", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babelify": "^8.0.0", + "babylon": "^6.18.0", + "chalk": "^2.3.0", + "chokidar": "^2.0.0", + "concat-stream": "^1.6.0", + "disparity": "^2.0.0", + "doctrine-temporary-fork": "2.0.0-alpha-allowarrayindex", + "get-port": "^3.2.0", + "git-url-parse": "^8.0.0", + "github-slugger": "1.2.0", + "glob": "^7.1.2", + "globals-docs": "^2.4.0", + "highlight.js": "^9.12.0", + "js-yaml": "^3.10.0", + "lodash": "^4.17.4", + "mdast-util-inject": "^1.1.0", + "micromatch": "^3.1.5", + "mime": "^1.4.1", + "module-deps-sortable": "4.0.6", + "parse-filepath": "^1.0.2", + "pify": "^3.0.0", + "read-pkg-up": "^3.0.0", + "remark": "^9.0.0", + "remark-html": "7.0.0", + "remark-reference-links": "^4.0.1", + "remark-toc": "^5.0.0", + "remote-origin-url": "0.4.0", + "shelljs": "^0.8.1", + "stream-array": "^1.1.2", + "strip-json-comments": "^2.0.1", + "tiny-lr": "^1.1.0", + "unist-builder": "^1.0.2", + "unist-util-visit": "^1.3.0", + "vfile": "^2.3.0", + "vfile-reporter": "^4.0.0", + "vfile-sort": "^2.1.0", + "vinyl": "^2.1.0", + "vinyl-fs": "^3.0.2", + "yargs": "^9.0.1" + }, + "dependencies": { + "vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "requires": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + } + } + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "yargs": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + }, + "dependencies": { + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + } + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } } }, "cli-boxes": { @@ -2162,15 +4257,9 @@ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" } }, - "cli-spinners": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", - "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", - "dev": true - }, "cli-truncate": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", @@ -2178,12 +4267,12 @@ "dev": true, "requires": { "slice-ansi": "0.0.4", - "string-width": "1.0.2" + "string-width": "^1.0.1" }, "dependencies": { "slice-ansi": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "resolved": "http://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true } @@ -2201,15 +4290,15 @@ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true }, "clone-buffer": { @@ -2218,6 +4307,15 @@ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", "dev": true }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "clone-stats": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", @@ -2225,14 +4323,14 @@ "dev": true }, "cloneable-readable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", - "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", + "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", "dev": true, "requires": { - "inherits": "2.0.3", - "process-nextick-args": "1.0.7", - "through2": "2.0.3" + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" } }, "co": { @@ -2248,20 +4346,22 @@ "dev": true }, "codecov": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.0.0.tgz", - "integrity": "sha1-wnO4xPEpRXI+jcnSWAPYk0Pl8o4=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.1.0.tgz", + "integrity": "sha512-aWQc/rtHbcWEQLka6WmBAOpV58J2TwyXqlpAQGhQaSiEUoigTTUk6lLd2vB3kXkhnDyzyH74RXfmV4dq2txmdA==", "dev": true, "requires": { - "argv": "0.0.2", - "request": "2.81.0", - "urlgrey": "0.4.4" + "argv": "^0.0.2", + "ignore-walk": "^3.0.1", + "js-yaml": "^3.12.0", + "request": "^2.87.0", + "urlgrey": "^0.4.4" } }, "collapse-white-space": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.3.tgz", - "integrity": "sha1-S5BvZw5aljqHt2sOFolkM0G2Ajw=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", + "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==", "dev": true }, "collection-visit": { @@ -2270,14 +4370,14 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" @@ -2290,9 +4390,9 @@ "dev": true }, "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz", + "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==", "dev": true }, "combine-lists": { @@ -2301,31 +4401,37 @@ "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.5.0" } }, "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "comma-separated-tokens": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.4.tgz", - "integrity": "sha1-cgg+WNSkYvAYZvZhf02Yo807ikY=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.5.tgz", + "integrity": "sha512-Cg90/fcK93n0ecgYTAz1jaA3zvnQ0ExlmKY1rdbyHqAx6BHxwoJc+J7HDu0iuQ7ixEs1qaa+WyQ6oeuBpYP1iA==", "dev": true, "requires": { "trim": "0.0.1" } }, "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "compare-func": { @@ -2334,8 +4440,8 @@ "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", "dev": true, "requires": { - "array-ify": "1.0.0", - "dot-prop": "3.0.0" + "array-ify": "^1.0.0", + "dot-prop": "^3.0.0" } }, "component-bind": { @@ -2363,28 +4469,29 @@ "dev": true }, "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "configstore": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz", - "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", "dev": true, "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.11", - "make-dir": "1.1.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.3.0", - "xdg-basedir": "3.0.0" + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" }, "dependencies": { "dot-prop": { @@ -2393,20 +4500,20 @@ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "dev": true, "requires": { - "is-obj": "1.0.1" + "is-obj": "^1.0.0" } } } }, "connect": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz", - "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=", + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", "dev": true, "requires": { "debug": "2.6.9", - "finalhandler": "1.0.6", - "parseurl": "1.3.2", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", "utils-merge": "1.0.1" } }, @@ -2416,7 +4523,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -2431,6 +4538,12 @@ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", @@ -2444,70 +4557,71 @@ "dev": true }, "conventional-changelog": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.7.tgz", - "integrity": "sha1-kVGmKx2O2y2CcR2r9bfPcQQfgrE=", + "version": "1.1.24", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.24.tgz", + "integrity": "sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==", "dev": true, "requires": { - "conventional-changelog-angular": "1.5.3", - "conventional-changelog-atom": "0.1.2", - "conventional-changelog-codemirror": "0.2.1", - "conventional-changelog-core": "1.9.4", - "conventional-changelog-ember": "0.2.10", - "conventional-changelog-eslint": "0.2.1", - "conventional-changelog-express": "0.2.1", - "conventional-changelog-jquery": "0.1.0", - "conventional-changelog-jscs": "0.1.0", - "conventional-changelog-jshint": "0.2.1" + "conventional-changelog-angular": "^1.6.6", + "conventional-changelog-atom": "^0.2.8", + "conventional-changelog-codemirror": "^0.3.8", + "conventional-changelog-core": "^2.0.11", + "conventional-changelog-ember": "^0.3.12", + "conventional-changelog-eslint": "^1.0.9", + "conventional-changelog-express": "^0.3.6", + "conventional-changelog-jquery": "^0.1.0", + "conventional-changelog-jscs": "^0.1.0", + "conventional-changelog-jshint": "^0.3.8", + "conventional-changelog-preset-loader": "^1.1.8" } }, "conventional-changelog-angular": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.5.3.tgz", - "integrity": "sha512-J+3g7H7O9QTxBFMmdlHSLzqTdxO8lhOKGXLAcewtKPGaVVV/JnaPOokuj85mP3tghP5gXi527HWoJlD3VBlX6g==", + "version": "1.6.6", + "resolved": "http://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz", + "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==", "dev": true, "requires": { - "compare-func": "1.3.2", - "q": "1.5.1" + "compare-func": "^1.3.1", + "q": "^1.5.1" } }, "conventional-changelog-atom": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.1.2.tgz", - "integrity": "sha1-Ella1SZ6aTfDTPkAKBscZRmKTGM=", + "version": "0.2.8", + "resolved": "http://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz", + "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==", "dev": true, "requires": { - "q": "1.5.1" + "q": "^1.5.1" } }, "conventional-changelog-codemirror": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.2.1.tgz", - "integrity": "sha1-KZpPcUe681DmyBWPxUlUopHFzAk=", + "version": "0.3.8", + "resolved": "http://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz", + "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==", "dev": true, "requires": { - "q": "1.5.1" + "q": "^1.5.1" } }, "conventional-changelog-core": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-1.9.4.tgz", - "integrity": "sha512-C8R8Bb706P10hYaGzllvH92O8Ck7xCGPB7t2Y+S1O2yf13BDvDW5BPdjyBwY2VgVNuFyNqi6qA458N+W9txpHg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz", + "integrity": "sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==", "dev": true, "requires": { - "conventional-changelog-writer": "2.0.3", - "conventional-commits-parser": "2.1.0", - "dateformat": "1.0.12", - "get-pkg-repo": "1.4.0", - "git-raw-commits": "1.3.0", - "git-remote-origin-url": "2.0.0", - "git-semver-tags": "1.2.3", - "lodash": "4.17.4", - "normalize-package-data": "2.4.0", - "q": "1.5.1", - "read-pkg": "1.1.0", - "read-pkg-up": "1.0.1", - "through2": "2.0.3" + "conventional-changelog-writer": "^3.0.9", + "conventional-commits-parser": "^2.1.7", + "dateformat": "^3.0.0", + "get-pkg-repo": "^1.0.0", + "git-raw-commits": "^1.3.6", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^1.3.6", + "lodash": "^4.2.1", + "normalize-package-data": "^2.3.5", + "q": "^1.5.1", + "read-pkg": "^1.1.0", + "read-pkg-up": "^1.0.1", + "through2": "^2.0.0" }, "dependencies": { "find-up": { @@ -2516,21 +4630,21 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, "parse-json": { @@ -2539,7 +4653,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "path-exists": { @@ -2548,7 +4662,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-type": { @@ -2557,14 +4671,14 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -2574,9 +4688,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { @@ -2585,8 +4699,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" } }, "strip-bom": { @@ -2595,45 +4709,45 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } }, "conventional-changelog-ember": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.2.10.tgz", - "integrity": "sha512-LBBBZO6Q7ib4HhSdyCNVR25OtaXl710UJg1aSHCLmR8AjuXKs3BO8tnbY1MH+D1C+z5IFoEDkpjOddefNTyhCQ==", + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz", + "integrity": "sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==", "dev": true, "requires": { - "q": "1.5.1" + "q": "^1.5.1" } }, "conventional-changelog-eslint": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-0.2.1.tgz", - "integrity": "sha1-LCoRvrIW+AZJunKDQYApO2h8BmI=", + "version": "1.0.9", + "resolved": "http://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz", + "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==", "dev": true, "requires": { - "q": "1.5.1" + "q": "^1.5.1" } }, "conventional-changelog-express": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.2.1.tgz", - "integrity": "sha1-g42eHmyQmXA7FQucGaoteBdCvWw=", + "version": "0.3.6", + "resolved": "http://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz", + "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==", "dev": true, "requires": { - "q": "1.5.1" + "q": "^1.5.1" } }, "conventional-changelog-jquery": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", + "resolved": "http://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=", "dev": true, "requires": { - "q": "1.5.1" + "q": "^1.4.1" } }, "conventional-changelog-jscs": { @@ -2642,86 +4756,95 @@ "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=", "dev": true, "requires": { - "q": "1.5.1" + "q": "^1.4.1" } }, "conventional-changelog-jshint": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.2.1.tgz", - "integrity": "sha1-hhObs6yZiZ8rF36WF+CbN9mbzzo=", + "version": "0.3.8", + "resolved": "http://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz", + "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==", "dev": true, "requires": { - "compare-func": "1.3.2", - "q": "1.5.1" + "compare-func": "^1.3.1", + "q": "^1.5.1" } }, + "conventional-changelog-preset-loader": { + "version": "1.1.8", + "resolved": "http://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz", + "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==", + "dev": true + }, "conventional-changelog-writer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-2.0.3.tgz", - "integrity": "sha512-2E1h7UXL0fhRO5h0CxDZ5EBc5sfBZEQePvuZ+gPvApiRrICUyNDy/NQIP+2TBd4wKZQf2Zm7TxbzXHG5HkPIbA==", + "version": "3.0.9", + "resolved": "http://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz", + "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==", "dev": true, "requires": { - "compare-func": "1.3.2", - "conventional-commits-filter": "1.1.1", - "dateformat": "1.0.12", - "handlebars": "4.0.11", - "json-stringify-safe": "5.0.1", - "lodash": "4.17.4", - "meow": "3.7.0", - "semver": "5.4.1", - "split": "1.0.1", - "through2": "2.0.3" + "compare-func": "^1.3.1", + "conventional-commits-filter": "^1.1.6", + "dateformat": "^3.0.0", + "handlebars": "^4.0.2", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.2.1", + "meow": "^4.0.0", + "semver": "^5.5.0", + "split": "^1.0.0", + "through2": "^2.0.0" } }, "conventional-commits-filter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.1.tgz", - "integrity": "sha512-bQyatySNKHhcaeKVr9vFxYWA1W1Tdz6ybVMYDmv4/FhOXY1+fchiW07TzRbIQZhVa4cvBwrEaEUQBbCncFSdJQ==", + "version": "1.1.6", + "resolved": "http://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz", + "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==", "dev": true, "requires": { - "is-subset": "0.1.1", - "modify-values": "1.0.0" + "is-subset": "^0.1.1", + "modify-values": "^1.0.0" } }, "conventional-commits-parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.0.tgz", - "integrity": "sha512-8MD05yN0Zb6aRsZnFX1ET+8rHWfWJk+my7ANCJZBU2mhz7TSB1fk2vZhkrwVy/PCllcTYAP/1T1NiWQ7Z01mKw==", + "version": "2.1.7", + "resolved": "http://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz", + "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==", "dev": true, "requires": { - "JSONStream": "1.3.1", - "is-text-path": "1.0.1", - "lodash": "4.17.4", - "meow": "3.7.0", - "split2": "2.2.0", - "through2": "2.0.3", - "trim-off-newlines": "1.0.1" + "JSONStream": "^1.0.4", + "is-text-path": "^1.0.0", + "lodash": "^4.2.1", + "meow": "^4.0.0", + "split2": "^2.0.0", + "through2": "^2.0.0", + "trim-off-newlines": "^1.0.0" } }, "conventional-github-releaser": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/conventional-github-releaser/-/conventional-github-releaser-1.1.13.tgz", - "integrity": "sha1-C+ezp8eGfoiL5SZHWlkP9ZMDUXw=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/conventional-github-releaser/-/conventional-github-releaser-2.0.2.tgz", + "integrity": "sha512-31dt3fbsl1nS8oODerFbUu+vY0rp99l3U+WscK4+FD5Gl9VzHuplOz1L5dFpvM3ffchxmOIaPxmrtViQbhGU+w==", "dev": true, "requires": { - "conventional-changelog": "1.1.7", - "dateformat": "1.0.12", - "git-semver-tags": "1.2.3", - "github": "0.2.4", - "lodash.merge": "4.6.0", - "meow": "3.7.0", - "object-assign": "4.1.1", - "q": "1.5.1", - "semver": "5.4.1", - "semver-regex": "1.0.0", - "through2": "2.0.3" + "conventional-changelog": "^1.1.0", + "dateformat": "^3.0.0", + "gh-got": "^6.0.0", + "git-semver-tags": "^1.0.0", + "lodash.merge": "^4.0.2", + "meow": "^4.0.0", + "object-assign": "^4.0.1", + "q": "^1.4.1", + "semver": "^5.0.1", + "semver-regex": "^1.0.0", + "through2": "^2.0.0" } }, "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } }, "cookie": { "version": "0.3.1", @@ -2729,6 +4852,26 @@ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", "dev": true }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -2736,9 +4879,9 @@ "dev": true }, "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", "dev": true }, "core-util-is": { @@ -2747,35 +4890,26 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "coveralls": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.0.tgz", - "integrity": "sha512-ZppXR9y5PraUOrf/DzHJY6gzNUhXYE3b9D43xEXs4QYZ7/Oe0Gy0CS+IPKWFfvQFXB3RG9QduaQUFehzSpGAFw==", + "cosmiconfig": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", "dev": true, "requires": { - "js-yaml": "3.10.0", - "lcov-parse": "0.0.10", - "log-driver": "1.2.5", - "minimist": "1.2.0", - "request": "2.81.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0", + "require-from-string": "^2.0.1" } }, "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-error-class": { @@ -2784,44 +4918,45 @@ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", "dev": true, "requires": { - "capture-stack-trace": "1.0.0" + "capture-stack-trace": "^1.0.0" } }, "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.9" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "version": "1.1.7", + "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" + "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" } }, "create-react-class": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.2.tgz", - "integrity": "sha1-zx7RXxKq1/FO9fLf4F5sQvke8Co=", + "version": "15.6.3", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", + "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", "dev": true, "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" + "fbjs": "^0.8.9", + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" } }, "cross-spawn": { @@ -2830,18 +4965,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.10.1" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-browserify": { @@ -2850,17 +4976,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.5", - "randomfill": "1.0.3" + "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" } }, "crypto-random-string": { @@ -2875,7 +5001,7 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, "custom-event": { @@ -2884,14 +5010,11 @@ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", "dev": true }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "0.10.37" - } + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true }, "dargs": { "version": "4.1.0", @@ -2899,7 +5022,7 @@ "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "dashdash": { @@ -2908,15 +5031,7 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "assert-plus": "^1.0.0" } }, "date-fns": { @@ -2925,6 +5040,12 @@ "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", "dev": true }, + "date-format": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", + "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", + "dev": true + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -2932,14 +5053,16 @@ "dev": true }, "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" - } + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true }, "debug": { "version": "2.6.9", @@ -2956,24 +5079,51 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "requires": { - "type-detect": "4.0.5" + "type-detect": "^4.0.0" } }, "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, "deep-is": { @@ -2983,22 +5133,53 @@ "dev": true }, "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" + "object-keys": "^1.0.12" } }, "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } } }, "defined": { @@ -3008,24 +5189,29 @@ "dev": true }, "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" }, "dependencies": { + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true } } @@ -3037,9 +5223,9 @@ "dev": true }, "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, "des.js": { @@ -3048,17 +5234,23 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, "detab": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.1.tgz", "integrity": "sha512-/hhdqdQc5thGrqzjyO/pz76lDZ5GSuAs6goxOaKTsvPk7HNnzAyFN5lyHgqpX4/s1i66K8qMGj+VhA9504x7DQ==", "dev": true, "requires": { - "repeat-string": "1.6.1" + "repeat-string": "^1.5.4" } }, "detect-file": { @@ -3073,22 +5265,22 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "detect-node": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", - "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" }, "detective": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.0.tgz", - "integrity": "sha512-4mBqSEdMfBpRAo/DQZnTcAXenpiSIJmVKbCMSotS+SFWWcrP/CKM6iBRPdTiEO+wZhlfEsoZlGqpG6ycl5vTqw==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", + "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", "dev": true, "requires": { - "acorn": "5.2.1", - "defined": "1.0.0" + "acorn": "^5.2.1", + "defined": "^1.0.0" } }, "di": { @@ -3104,14 +5296,14 @@ "dev": true }, "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "version": "5.0.3", + "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.5" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "disparity": { @@ -3120,8 +5312,8 @@ "integrity": "sha1-V92stHMkrl9Y0swNqIbbTOnutxg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "diff": "1.4.0" + "ansi-styles": "^2.0.1", + "diff": "^1.3.2" }, "dependencies": { "ansi-styles": { @@ -3138,8 +5330,8 @@ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } }, "doctrine-temporary-fork": { @@ -3148,72 +5340,149 @@ "integrity": "sha1-QAFahn6yfnWybIKLcVJPE3+J+fA=", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } }, "documentation": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/documentation/-/documentation-5.3.5.tgz", - "integrity": "sha512-VApv5dCFxjD5WZxEYGqZypK7L3l00clw9qbSTYCwdnvsaAhu7/U+FCHvkdtnCtkmLupIF/SxXPfXc4kB3UfXEg==", + "version": "9.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/documentation/-/documentation-9.0.0-alpha.1.tgz", + "integrity": "sha512-a3HUcoN/cdjLuiJT6EnobsZ/B0uhgmhYmLunqMw+IqAErd2AoaKp8cZcA8WFOqXAMdlmQIEmWkiINstTc3MYyQ==", "dev": true, "requires": { - "ansi-html": "0.0.7", - "babel-core": "6.26.0", - "babel-generator": "6.26.0", - "babel-plugin-system-import-transformer": "3.1.0", - "babel-plugin-transform-decorators-legacy": "1.3.4", - "babel-preset-env": "1.6.1", - "babel-preset-react": "6.24.1", - "babel-preset-stage-0": "6.24.1", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babelify": "8.0.0", - "babylon": "6.18.0", - "chalk": "2.3.0", - "chokidar": "1.7.0", - "concat-stream": "1.6.0", - "disparity": "2.0.0", - "doctrine-temporary-fork": "2.0.0-alpha-allowarrayindex", - "get-port": "3.2.0", - "git-url-parse": "6.2.2", + "@babel/core": "^7.1.2", + "@babel/generator": "^7.1.3", + "@babel/parser": "7.1.3", + "@babel/plugin-proposal-class-properties": "^7.1.0", + "@babel/plugin-proposal-decorators": "^7.1.2", + "@babel/plugin-proposal-do-expressions": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-export-namespace-from": "^7.0.0", + "@babel/plugin-proposal-function-bind": "^7.0.0", + "@babel/plugin-proposal-function-sent": "^7.1.0", + "@babel/plugin-proposal-json-strings": "^7.0.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-proposal-pipeline-operator": "^7.0.0", + "@babel/plugin-proposal-throw-expressions": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-import-meta": "^7.0.0", + "@babel/preset-env": "^7.1.0", + "@babel/preset-flow": "^7.0.0", + "@babel/preset-react": "^7.0.0", + "@babel/preset-stage-0": "^7.0.0", + "@babel/traverse": "^7.1.4", + "@babel/types": "^7.1.3", + "ansi-html": "^0.0.7", + "babelify": "^10.0.0", + "chalk": "^2.3.0", + "chokidar": "^2.0.0", + "concat-stream": "^1.6.0", + "disparity": "^2.0.0", + "doctrine-temporary-fork": "2.0.1", + "get-port": "^4.0.0", + "git-url-parse": "^10.0.1", "github-slugger": "1.2.0", - "glob": "7.1.2", - "globals-docs": "2.4.0", - "highlight.js": "9.12.0", - "js-yaml": "3.10.0", - "lodash": "4.17.4", - "mdast-util-inject": "1.1.0", - "micromatch": "3.1.4", - "mime": "1.6.0", - "module-deps-sortable": "4.0.6", - "parse-filepath": "1.0.1", - "pify": "3.0.0", - "read-pkg-up": "3.0.0", - "remark": "8.0.0", - "remark-html": "7.0.0", - "remark-toc": "4.0.1", + "glob": "^7.1.2", + "globals-docs": "^2.4.0", + "highlight.js": "^9.12.0", + "js-yaml": "^3.10.0", + "lodash": "^4.17.10", + "mdast-util-inject": "^1.1.0", + "micromatch": "^3.1.5", + "mime": "^2.2.0", + "module-deps-sortable": "5.0.0", + "parse-filepath": "^1.0.2", + "pify": "^4.0.0", + "read-pkg-up": "^4.0.0", + "remark": "^9.0.0", + "remark-html": "^8.0.0", + "remark-reference-links": "^4.0.1", + "remark-toc": "^5.0.0", "remote-origin-url": "0.4.0", - "shelljs": "0.7.8", - "stream-array": "1.1.2", - "strip-json-comments": "2.0.1", - "tiny-lr": "1.0.5", - "unist-builder": "1.0.2", - "unist-util-visit": "1.3.0", - "vfile": "2.3.0", - "vfile-reporter": "4.0.0", - "vfile-sort": "2.1.0", - "vinyl": "2.1.0", - "vinyl-fs": "3.0.0", - "yargs": "9.0.1" + "resolve": "^1.8.1", + "stream-array": "^1.1.2", + "strip-json-comments": "^2.0.1", + "tiny-lr": "^1.1.0", + "unist-builder": "^1.0.2", + "unist-util-visit": "^1.3.0", + "vfile": "^3.0.0", + "vfile-reporter": "^5.0.0", + "vfile-sort": "^2.1.0", + "vinyl": "^2.1.0", + "vinyl-fs": "^3.0.2", + "vue-template-compiler": "^2.5.16", + "yargs": "^9.0.1" }, "dependencies": { + "@babel/parser": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.1.3.tgz", + "integrity": "sha512-gqmspPZOMW3MIRb9HlrnbZHXI1/KHTOroBwN1NcLL6pWxzqzEKGvRTq0W/PxS45OtQGbaFikSQpkS5zbnsQm2w==", + "dev": true + }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "babelify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", + "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", + "dev": true + }, + "doctrine-temporary-fork": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/doctrine-temporary-fork/-/doctrine-temporary-fork-2.0.1.tgz", + "integrity": "sha512-+GQh3niRkKtSr7cKDo8po+NHkJZyC2Ebwvjz9fvq0ReQr9kIDS6BY9MDrzx+KbbLxvSj3vD/eUaeIoURHzEAFQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "get-port": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.0.0.tgz", + "integrity": "sha512-Yy3yNI2oShgbaWg4cmPhWjkZfktEvpKI09aDX4PZzNtlU9obuYrX7x2mumQsrNxlF+Ls7OtMQW/u+X4s896bOQ==", + "dev": true + }, + "git-url-parse": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-10.1.0.tgz", + "integrity": "sha512-goZOORAtFjU1iG+4zZgWq+N7It09PqS3Xsy43ZwhP5unDD0tTSmXTpqULHodMdJXGejm3COwXIhIRT6Z8DYVZQ==", + "dev": true, + "requires": { + "git-up": "^2.0.0" + } + }, + "hast-util-to-html": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-4.0.1.tgz", + "integrity": "sha512-2emzwyf0xEsc4TBIPmDJmBttIw8R4SXAJiJZoiRR/s47ODYWgOqNoDbf2SJAbMbfNdFWMiCSOrI3OVnX6Qq2Mg==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "comma-separated-tokens": "^1.0.1", + "hast-util-is-element": "^1.0.0", + "hast-util-whitespace": "^1.0.0", + "html-void-elements": "^1.0.0", + "property-information": "^4.0.0", + "space-separated-tokens": "^1.0.0", + "stringify-entities": "^1.0.1", + "unist-util-is": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -3222,31 +5491,88 @@ }, "load-json-file": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" }, "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } } }, + "mime": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "dev": true + }, + "module-deps-sortable": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/module-deps-sortable/-/module-deps-sortable-5.0.0.tgz", + "integrity": "sha512-bnGGeghQmz/t/6771/KC4FmxpVm126iR6AAzzq4N6hVZQVl4+ZZBv+VF3PJmDyxXtVtgcgTSSP7NL+jq1QAHrg==", + "dev": true, + "requires": { + "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", + "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" + }, + "dependencies": { + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~2.0.0", + "typedarray": "~0.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "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" + } + } + } + } + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "path-type": { @@ -3255,26 +5581,53 @@ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^2.0.0" }, "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } } }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "property-information": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-4.2.0.tgz", + "integrity": "sha512-TlgDPagHh+eBKOnH2VYvk8qbwsCG/TAJdmTL7f1PROUcSO8qt/KSmShEQ/OKvock8X9tFjtqjCScyOkkkvIKVQ==", + "dev": true, + "requires": { + "xtend": "^4.0.1" + } + }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "remark-html": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark-html/-/remark-html-8.0.0.tgz", + "integrity": "sha512-3V2391GL3hxKhrkzYOyfPpxJ6taIKLCfuLVqumeWQOk3H9nTtSQ8St8kMYkBVIEAquXN1chT83qJ/2lAW+dpEg==", + "dev": true, + "requires": { + "hast-util-sanitize": "^1.0.0", + "hast-util-to-html": "^4.0.0", + "mdast-util-to-hast": "^3.0.0", + "xtend": "^4.0.1" } }, "string-width": { @@ -3283,42 +5636,74 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" + } + }, + "vfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", + "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", + "dev": true, + "requires": { + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + } + }, + "vfile-reporter": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-5.1.0.tgz", + "integrity": "sha512-I6h4GrkNCZf7nWCxcN7BSDAez8+4xD9+qfu5I7yroH6Kj+lpAFFIYfY6WgfCHyscAow5BkOpfHS5hHGBN1Qf8g==", + "dev": true, + "requires": { + "repeat-string": "^1.5.0", + "string-width": "^2.0.0", + "supports-color": "^5.4.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-sort": "^2.1.2", + "vfile-statistics": "^1.1.0" } }, "vinyl-fs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.0.tgz", - "integrity": "sha1-zjRZK5DAM4vaLVwSFWaXNlH5DCM=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", "dev": true, "requires": { - "flush-write-stream": "1.0.2", - "fs-mkdirp-stream": "1.0.0", - "glob-stream": "6.1.0", - "graceful-fs": "4.1.11", - "is-valid-glob": "1.0.0", - "lazystream": "1.0.0", - "lead": "1.0.0", - "object.assign": "4.0.4", - "pumpify": "1.3.5", - "remove-bom-buffer": "3.0.0", - "remove-bom-stream": "1.2.0", - "resolve-options": "1.1.0", - "through2": "2.0.3", - "to-through": "2.0.0", - "value-or-function": "3.0.0", - "vinyl": "2.1.0", - "vinyl-sourcemap": "1.1.0" + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" } }, "yargs": { @@ -3327,19 +5712,19 @@ "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", "dev": true, "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" }, "dependencies": { "read-pkg-up": { @@ -3348,11 +5733,20 @@ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } } } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } } } }, @@ -3362,9 +5756,9 @@ "integrity": "sha1-itJslFw3FNV0RRvmQCUKCkKOVk0=", "dev": true, "requires": { - "doctrine": "1.5.0", - "globals-docs": "2.4.0", - "unist-builder": "1.0.2" + "doctrine": "^1.2.0", + "globals-docs": "^2.2.0", + "unist-builder": "^1.0.0" } }, "dom-serialize": { @@ -3373,16 +5767,16 @@ "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "dev": true, "requires": { - "custom-event": "1.0.1", - "ent": "2.2.0", - "extend": "3.0.1", - "void-elements": "2.0.1" + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" } }, "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, "dot-prop": { @@ -3391,16 +5785,22 @@ "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", "dev": true, "requires": { - "is-obj": "1.0.1" + "is-obj": "^1.0.0" } }, + "duplexer": { + "version": "0.1.1", + "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.2" } }, "duplexer3": { @@ -3410,46 +5810,57 @@ "dev": true }, "duplexify": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", - "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", + "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", "dev": true, "requires": { - "end-of-stream": "1.4.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, - "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" }, "dependencies": { "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true + "dev": true } } }, + "edge-launcher": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/edge-launcher/-/edge-launcher-1.2.2.tgz", + "integrity": "sha1-60Cq+9Bnpup27/+rBke81VCbN7I=", + "dev": true + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, + "ejs": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", + "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", + "dev": true + }, "electron-to-chromium": { - "version": "1.3.28", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.28.tgz", - "integrity": "sha1-jdTmRYCGZE6fnwoc8y4qH53/2e4=", + "version": "1.3.84", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.84.tgz", + "integrity": "sha512-IYhbzJYOopiTaNWMBp7RjbecUBsbnbDneOP86f3qvS0G0xfzwNSvMJpTrvi5/Y1gU7tg2NAgeg8a8rCYvW9Whw==", "dev": true }, "elegant-spinner": { @@ -3459,20 +5870,26 @@ "dev": true }, "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "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" } }, + "email-addresses": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.0.2.tgz", + "integrity": "sha512-IMn9dnwLMsgZjdUHswB/UZ0S8LQ/u+2/qjnHJ9tCtp3QHZsIYwJCiJOo2FT0i3CwwK/dtSODYtxuvzV4D9MY5g==", + "dev": true + }, "emoji-regex": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", @@ -3486,9 +5903,9 @@ "dev": true }, "encodeurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, "encoding": { @@ -3497,110 +5914,95 @@ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "dev": true, "requires": { - "iconv-lite": "0.4.19" + "iconv-lite": "~0.4.13" } }, "end-of-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", - "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "engine.io": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", - "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", "dev": true, "requires": { - "accepts": "1.3.3", + "accepts": "~1.3.4", "base64id": "1.0.0", "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "1.1.2" + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" }, "dependencies": { "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true } } }, "engine.io-client": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", - "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "version": "3.2.1", + "resolved": "http://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", "dev": true, "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", "has-cors": "1.1.0", "indexof": "0.0.1", - "parsejson": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "1.1.2", - "xmlhttprequest-ssl": "1.5.3", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" }, "dependencies": { "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true } } }, "engine.io-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", "dev": true, "requires": { "after": "0.8.2", - "arraybuffer.slice": "0.0.6", + "arraybuffer.slice": "~0.0.7", "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" + "blob": "0.0.5", + "has-binary2": "~1.0.2" } }, "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "ent": { @@ -3610,12 +6012,12 @@ "dev": true }, "errno": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.6.tgz", - "integrity": "sha512-IsORQDpaaSwcDP4ZZnHxgE85werpo34VYn1Ud3mq+eUsF593faR8oCZNXrROVkpFu2TsbrNhHin0aUrTsQ9vNw==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "error": { @@ -3624,103 +6026,48 @@ "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", "dev": true, "requires": { - "string-template": "0.2.1", - "xtend": "4.0.1" + "string-template": "~0.2.1", + "xtend": "~4.0.0" } }, "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, - "es5-ext": { - "version": "0.10.37", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.37.tgz", - "integrity": "sha1-DudB0Ui4AGm6J9AgOTdWryV978M=", + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "dev": true, "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "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" } }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37", - "es6-symbol": "3.1.1" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-promise": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz", - "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==", - "dev": true - }, "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "4.1.1" - } - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.0.1.tgz", + "integrity": "sha512-J3ZkwbEnnO+fGAKrjVpeUAnZshAdfZvbhQpqfIH9kSAspReRC4nJnu8ewm55b4y9ElyeuhCTzJD0XiH8Tsbhlw==", + "dev": true }, "escape-html": { "version": "1.0.3", @@ -3734,73 +6081,62 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", - "estraverse": "4.2.0" - } - }, "eslint": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.13.1.tgz", - "integrity": "sha512-UCJVV50RtLHYzBp1DZ8CMPtRSg4iVZvjgO9IJHIKyWU/AnJVjtdRikoUPLB29n5pzMB7TnsLQWf0V6VUJfoPfw==", + "version": "4.19.1", + "resolved": "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "dev": true, "requires": { - "ajv": "5.5.1", - "babel-code-frame": "6.26.0", - "chalk": "2.3.0", - "concat-stream": "1.6.0", - "cross-spawn": "5.1.0", - "debug": "3.1.0", - "doctrine": "2.0.2", - "eslint-scope": "3.7.1", - "espree": "3.5.2", - "esquery": "1.0.0", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "11.1.0", - "ignore": "3.3.7", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.0.1", - "js-yaml": "3.10.0", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "7.0.0", - "progress": "2.0.0", - "require-uncached": "1.0.3", - "semver": "5.4.1", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", "table": "4.0.2", - "text-table": "0.2.0" + "text-table": "~0.2.0" }, "dependencies": { "ajv": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.1.tgz", - "integrity": "sha1-s4u4h22ehr7plJVqBOch6IskjrI=", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "ansi-regex": { @@ -3810,27 +6146,39 @@ "dev": true }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "doctrine": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.2.tgz", - "integrity": "sha512-y0tm5Pq6ywp3qSTZ1vPgVdAnbDEoeoc5wlOHXoY1c4Wug/a7JvqHIl7BTvwodaHmejWkK/9dSb3sCYfyo/om8A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "2.0.2" + "esutils": "^2.0.2" } }, - "globals": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.1.0.tgz", - "integrity": "sha512-uEuWt9mqTlPDwSqi+sHjD4nWU/1N+q0fiWI9T1mZpD2UENqX20CFD5T/ziLZvztPaBKl7ZylUi1q6Qfm7E2CiQ==", + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, "strip-ansi": { @@ -3839,78 +6187,95 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } }, - "eslint-config-aegir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-aegir/-/eslint-config-aegir-1.0.1.tgz", - "integrity": "sha1-UxLUvPBj4sbz7Pdhm66PDNTMegQ=", - "dev": true, - "requires": { - "eslint-config-standard": "10.2.1", - "eslint-plugin-import": "2.8.0", - "eslint-plugin-node": "5.2.1", - "eslint-plugin-promise": "3.6.0", - "eslint-plugin-standard": "3.0.1" - } - }, "eslint-config-standard": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", - "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=", + "version": "11.0.0", + "resolved": "http://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-11.0.0.tgz", + "integrity": "sha512-oDdENzpViEe5fwuRCWla7AXQd++/oyIp8zP+iP9jiUPG6NBj3SHgdgtl/kTn00AjeN+1HNvavTKmYbMo+xMOlw==", "dev": true }, "eslint-import-resolver-node": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz", - "integrity": "sha512-yUtXS15gIcij68NmXmP9Ni77AQuCN0itXbCc/jWd8C6/yKZaSNXicpC8cgvjnxVdmfsosIXrjpzFq7GcDryb6A==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", "dev": true, "requires": { - "debug": "2.6.9", - "resolve": "1.5.0" + "debug": "^2.6.9", + "resolve": "^1.5.0" } }, "eslint-module-utils": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz", - "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", + "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", "dev": true, "requires": { - "debug": "2.6.9", - "pkg-dir": "1.0.0" + "debug": "^2.6.8", + "pkg-dir": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + } } }, "eslint-plugin-import": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz", - "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", + "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", "dev": true, "requires": { - "builtin-modules": "1.1.1", - "contains-path": "0.1.0", - "debug": "2.6.9", + "contains-path": "^0.1.0", + "debug": "^2.6.8", "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.1", - "eslint-module-utils": "2.1.1", - "has": "1.0.1", - "lodash.cond": "4.5.2", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.0" + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.2.0", + "has": "^1.0.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0", + "resolve": "^1.6.0" }, "dependencies": { "load-json-file": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" } }, "parse-json": { @@ -3919,7 +6284,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "path-type": { @@ -3928,12 +6293,12 @@ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^2.0.0" } }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -3943,9 +6308,9 @@ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" } }, "read-pkg-up": { @@ -3954,87 +6319,84 @@ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } } } }, "eslint-plugin-node": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz", - "integrity": "sha512-xhPXrh0Vl/b7870uEbaumb2Q+LxaEcOQ3kS1jtIXanBAwpMre1l5q/l2l/hESYJGEFKuI78bp6Uw50hlpr7B+g==", + "version": "6.0.1", + "resolved": "http://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz", + "integrity": "sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw==", "dev": true, "requires": { - "ignore": "3.3.7", - "minimatch": "3.0.4", - "resolve": "1.5.0", - "semver": "5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } + "ignore": "^3.3.6", + "minimatch": "^3.0.4", + "resolve": "^1.3.3", + "semver": "^5.4.1" } }, "eslint-plugin-promise": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz", - "integrity": "sha512-YQzM6TLTlApAr7Li8vWKR+K3WghjwKcYzY0d2roWap4SLK+kzuagJX/leTetIDWsFcTFnKNJXWupDCD6aZkP2Q==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz", + "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==", "dev": true }, "eslint-plugin-standard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", - "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.1.0.tgz", + "integrity": "sha512-fVcdyuKRr0EZ4fjWl3c+gp1BANFJD1+RaWa2UPYfMZ6jCtp5RG00kSaXnK/dE5sYzt4kaWJ9qdxqUfc0d9kX0w==", "dev": true }, "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", "dev": true, "requires": { - "esrecurse": "4.2.0", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, "espree": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz", - "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", + "version": "3.5.4", + "resolved": "http://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { - "acorn": "5.2.1", - "acorn-jsx": "3.0.1" + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" } }, "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.0.0" } }, "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -4049,25 +6411,21 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37" - } + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true }, "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", "dev": true }, "events": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", "dev": true }, @@ -4077,23 +6435,57 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, "exenv": { @@ -4114,18 +6506,24 @@ "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", "dev": true, "requires": { - "array-slice": "0.2.3", - "array-unique": "0.2.1", - "braces": "0.1.5" + "array-slice": "^0.2.3", + "array-unique": "^0.2.1", + "braces": "^0.1.2" }, "dependencies": { + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, "braces": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", "dev": true, "requires": { - "expand-range": "0.1.1" + "expand-range": "^0.1.0" } }, "expand-range": { @@ -4134,8 +6532,8 @@ "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", "dev": true, "requires": { - "is-number": "0.1.1", - "repeat-string": "0.2.2" + "is-number": "^0.1.1", + "repeat-string": "^0.2.2" } }, "is-number": { @@ -4153,12 +6551,38 @@ } }, "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "expand-range": { @@ -4167,7 +6591,49 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.3" + "fill-range": "^2.1.0" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "expand-tilde": { @@ -4176,42 +6642,171 @@ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "homedir-polyfill": "1.0.1" + "homedir-polyfill": "^1.0.1" + } + }, + "express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.4", + "qs": "6.5.2", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "finalhandler": { + "version": "1.1.1", + "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } } }, "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "external-editor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", - "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", + "version": "2.2.0", + "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.19", - "tmp": "0.0.33" + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" } }, "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "is-extglob": "1.0.0" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } } }, "extsprintf": { @@ -4221,9 +6816,9 @@ "dev": true }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, "fast-json-stable-stringify": { @@ -4244,27 +6839,27 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "fbjs": { - "version": "0.8.16", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", - "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", "dev": true, "requires": { - "core-js": "1.2.7", - "isomorphic-fetch": "2.2.1", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "promise": "7.3.1", - "setimmediate": "1.0.5", - "ua-parser-js": "0.7.17" + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" }, "dependencies": { "core-js": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "resolved": "http://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", "dev": true } @@ -4276,7 +6871,7 @@ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { @@ -4285,8 +6880,8 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, "filename-regex": { @@ -4295,38 +6890,75 @@ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", "dev": true }, + "filename-reserved-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", + "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=", + "dev": true + }, + "filenamify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", + "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=", + "dev": true, + "requires": { + "filename-reserved-regex": "^1.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } + }, + "filenamify-url": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/filenamify-url/-/filenamify-url-1.0.0.tgz", + "integrity": "sha1-syvYExnvWGO3MHi+1Q9GpPeXX1A=", + "dev": true, + "requires": { + "filenamify": "^1.0.0", + "humanize-url": "^1.0.0" + } + }, "filesize": { - "version": "3.5.11", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.5.11.tgz", - "integrity": "sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", "dev": true }, "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "finalhandler": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", - "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" }, "dependencies": { "statuses": { @@ -4337,13 +6969,30 @@ } } }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } + }, + "find-parent-dir": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", + "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", + "dev": true + }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "findup-sync": { @@ -4352,25 +7001,19 @@ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", "dev": true, "requires": { - "detect-file": "1.0.0", - "is-glob": "3.1.0", - "micromatch": "3.1.4", - "resolve-dir": "1.0.1" + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" }, "dependencies": { - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -4382,25 +7025,45 @@ "dev": true }, "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.2.tgz", + "integrity": "sha512-KByBY8c98sLUAGpnmjEdWTrtrLZRtZdwds+kAL/ciFXTCb7AZgqKsAnVnYFQj1hxepwO8JKN/8AsRWwLq+RK0A==", "dev": true, "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" + "circular-json": "^0.3.1", + "del": "^3.0.0", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" } }, "flush-write-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", - "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, + "follow-redirects": { + "version": "1.5.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.9.tgz", + "integrity": "sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==", + "dev": true, + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "for-in": { @@ -4415,15 +7078,9 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -4431,43 +7088,65 @@ "dev": true }, "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" } }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-access": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "dev": true, "requires": { - "null-check": "1.0.0" + "null-check": "^1.0.0" } }, "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "4.0.0", - "universalify": "0.1.1" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs-mkdirp-stream": { @@ -4476,8 +7155,26 @@ "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "through2": "2.0.3" + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -4487,39 +7184,29 @@ "dev": true }, "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "dev": true, "optional": true, "requires": { - "nan": "2.8.0", - "node-pre-gyp": "0.6.39" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { - "version": "1.1.0", + "version": "1.1.1", "bundled": true, "dev": true, "optional": true }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, "ansi-regex": { "version": "2.1.1", "bundled": true, "dev": true }, "aproba": { - "version": "1.1.1", + "version": "1.2.0", "bundled": true, "dev": true, "optional": true @@ -4530,92 +7217,26 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, "balanced-match": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { "version": "1.0.0", "bundled": true, "dev": true }, - "caseless": { - "version": "0.12.0", + "brace-expansion": { + "version": "1.1.11", "bundled": true, "dev": true, - "optional": true + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "co": { - "version": "4.6.0", + "chownr": { + "version": "1.0.1", "bundled": true, "dev": true, "optional": true @@ -4625,14 +7246,6 @@ "bundled": true, "dev": true }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, "concat-map": { "version": "0.0.1", "bundled": true, @@ -4646,35 +7259,11 @@ "core-util-is": { "version": "1.0.2", "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } + "optional": true }, "debug": { - "version": "2.6.8", + "version": "2.6.9", "bundled": true, "dev": true, "optional": true, @@ -4683,16 +7272,11 @@ } }, "deep-extend": { - "version": "0.4.2", + "version": "0.5.1", "bundled": true, "dev": true, "optional": true }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, "delegates": { "version": "1.0.0", "bundled": true, @@ -4700,74 +7284,25 @@ "optional": true }, "detect-libc": { - "version": "1.0.2", + "version": "1.0.3", "bundled": true, "dev": true, "optional": true }, - "ecc-jsbn": { - "version": "0.1.1", + "fs-minipass": { + "version": "1.2.5", "bundled": true, "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "minipass": "^2.2.1" } }, "fs.realpath": { "version": "1.0.0", "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } + "optional": true }, "gauge": { "version": "2.7.4", @@ -4775,65 +7310,28 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { "version": "7.1.2", "bundled": true, "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "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" } }, "has-unicode": { @@ -4842,40 +7340,32 @@ "dev": true, "optional": true }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", + "iconv-lite": { + "version": "0.4.21", "bundled": true, "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" + "safer-buffer": "^2.1.0" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" } }, "inflight": { "version": "1.0.6", "bundled": true, "dev": true, + "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -4884,7 +7374,7 @@ "dev": true }, "ini": { - "version": "1.3.4", + "version": "1.3.5", "bundled": true, "dev": true, "optional": true @@ -4894,107 +7384,21 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, "isarray": { "version": "1.0.0", "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, "dev": true, "optional": true }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, "minimatch": { "version": "3.0.4", "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.7" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -5002,6 +7406,24 @@ "bundled": true, "dev": true }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, "mkdirp": { "version": "0.5.1", "bundled": true, @@ -5016,23 +7438,33 @@ "dev": true, "optional": true }, - "node-pre-gyp": { - "version": "0.6.39", + "needle": { + "version": "2.2.0", "bundled": true, "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -5041,20 +7473,36 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" + "abbrev": "1", + "osenv": "^0.1.4" } }, - "npmlog": { - "version": "4.1.0", + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", "bundled": true, "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -5062,12 +7510,6 @@ "bundled": true, "dev": true }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, "object-assign": { "version": "4.1.1", "bundled": true, @@ -5079,7 +7521,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -5095,53 +7537,37 @@ "optional": true }, "osenv": { - "version": "0.1.4", + "version": "0.1.5", "bundled": true, "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { "version": "1.0.1", "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, "dev": true, "optional": true }, "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", + "version": "2.0.0", "bundled": true, "dev": true, "optional": true }, "rc": { - "version": "1.2.1", + "version": "1.2.7", "bundled": true, "dev": true, "optional": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -5153,64 +7579,48 @@ } }, "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", + "version": "2.3.6", "bundled": true, "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.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.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" + "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.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { - "version": "2.6.1", + "version": "2.6.2", "bundled": true, "dev": true, + "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { - "version": "5.0.1", + "version": "5.1.1", "bundled": true, "dev": true }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, "semver": { - "version": "5.3.0", + "version": "5.5.0", "bundled": true, "dev": true, "optional": true @@ -5227,69 +7637,31 @@ "dev": true, "optional": true }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, "string-width": { "version": "1.0.2", "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { - "version": "1.0.1", + "version": "1.1.1", "bundled": true, "dev": true, + "optional": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, "strip-ansi": { "version": "3.0.1", "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -5299,94 +7671,44 @@ "optional": true }, "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", + "version": "4.4.1", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, "util-deprecate": { "version": "1.0.2", "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, "dev": true, "optional": true }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, "wide-align": { "version": "1.1.2", "bundled": true, "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { "version": "1.0.2", "bundled": true, "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true } } }, @@ -5403,9 +7725,9 @@ "dev": true }, "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, "get-func-name": { @@ -5419,11 +7741,181 @@ "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=", "dev": true, "requires": { - "hosted-git-info": "2.5.0", - "meow": "3.7.0", - "normalize-package-data": "2.4.0", - "parse-github-repo-url": "1.4.1", - "through2": "2.0.3" + "hosted-git-info": "^2.1.4", + "meow": "^3.3.0", + "normalize-package-data": "^2.3.0", + "parse-github-repo-url": "^1.3.0", + "through2": "^2.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + } } }, "get-port": { @@ -5440,7 +7932,7 @@ }, "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, @@ -5456,64 +7948,94 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" + } + }, + "gh-got": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-6.0.0.tgz", + "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", + "dev": true, + "requires": { + "got": "^7.0.0", + "is-plain-obj": "^1.1.0" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dev": true, + "requires": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + } + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", "dev": true + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } } } }, "gh-pages": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-1.1.0.tgz", - "integrity": "sha512-ZpDkeOVmIrN5mz+sBWDz5zmTqcbNJzI/updCwEv/7rrSdpTNlj1B5GhBqG7f4Q8p5sJOdnBV0SIqxJrxtZQ9FA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-2.0.1.tgz", + "integrity": "sha512-uFlk3bukljeiWKQ2XvPfjcSi/ou7IfoDf2p+Fj672saLAr8bnOdFVqI/JSgrSgInKpCg5BksxEwGUl++dbg8Dg==", "dev": true, "requires": { - "async": "2.6.0", - "base64url": "2.0.0", - "commander": "2.11.0", - "fs-extra": "4.0.3", - "globby": "6.1.0", - "graceful-fs": "4.1.11", - "rimraf": "2.6.2" - }, - "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "async": "^2.6.1", + "commander": "^2.18.0", + "email-addresses": "^3.0.1", + "filenamify-url": "^1.0.0", + "fs-extra": "^7.0.0", + "globby": "^6.1.0", + "graceful-fs": "^4.1.11", + "rimraf": "^2.6.2" } }, "git-raw-commits": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.0.tgz", - "integrity": "sha1-C8hZbpDV/+c29/VUa9LRL3OrqsY=", + "version": "1.3.6", + "resolved": "http://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz", + "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==", "dev": true, "requires": { - "dargs": "4.1.0", - "lodash.template": "4.4.0", - "meow": "3.7.0", - "split2": "2.2.0", - "through2": "2.0.3" + "dargs": "^4.0.1", + "lodash.template": "^4.0.2", + "meow": "^4.0.0", + "split2": "^2.0.0", + "through2": "^2.0.0" } }, "git-remote-origin-url": { @@ -5522,63 +8044,61 @@ "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", "dev": true, "requires": { - "gitconfiglocal": "1.0.0", - "pify": "2.3.0" + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" }, "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } } }, "git-semver-tags": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.2.3.tgz", - "integrity": "sha1-GItFOIK/nXojr9Mbq6U32rc4jV0=", + "version": "1.3.6", + "resolved": "http://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz", + "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==", "dev": true, "requires": { - "meow": "3.7.0", - "semver": "5.4.1" + "meow": "^4.0.0", + "semver": "^5.5.0" } }, "git-up": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-2.0.9.tgz", - "integrity": "sha1-IZv9J8gtrurYSVvrOG3Bjq5jY20=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-2.1.0.tgz", + "integrity": "sha512-MJgwfcSd9qxgDyEYpRU/CDxNpUadrK80JHuEQDG4Urn0m7tpSOgCBrtiSIa9S9KH8Tbuo/TN8SSQmJBvsw1HkA==", "dev": true, "requires": { - "is-ssh": "1.3.0", - "parse-url": "1.3.11" + "is-ssh": "^1.3.0", + "parse-url": "^3.0.2" } }, "git-url-parse": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-6.2.2.tgz", - "integrity": "sha1-vkkCThS4SHVTQ2tFcri0OVMvqHE=", + "version": "8.3.1", + "resolved": "http://registry.npmjs.org/git-url-parse/-/git-url-parse-8.3.1.tgz", + "integrity": "sha512-r/FxXIdfgdSO+V2zl4ZK1JGYkHT9nqVRSzom5WsYPLg3XzeBeKPl3R/6X9E9ZJRx/sE/dXwXtfl+Zp7YL8ktWQ==", "dev": true, "requires": { - "git-up": "2.0.9" + "git-up": "^2.0.0", + "parse-domain": "^2.0.0" } }, + "git-validate": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/git-validate/-/git-validate-2.2.4.tgz", + "integrity": "sha512-BM49gj2g/VtV+AvsaGYfIXavVyWUfqcJt2klTOr7kji/HYqpgwB6CmlevIJuPyGoBPkIUUXNSov33Ht22juh0Q==", + "dev": true + }, "gitconfiglocal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", "dev": true, "requires": { - "ini": "1.3.5" - } - }, - "github": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/github/-/github-0.2.4.tgz", - "integrity": "sha1-JPp/DhP6EblGr5ETTFGYKpHOU4s=", - "dev": true, - "requires": { - "mime": "1.6.0" + "ini": "^1.3.2" } }, "github-slugger": { @@ -5587,21 +8107,21 @@ "integrity": "sha512-wIaa75k1vZhyPm9yWrD08A5Xnx/V+RmzGrpjQuLemGKSb77Qukiaei58Bogrl/LZSADDfPzKJX8jhLs4CRTl7Q==", "dev": true, "requires": { - "emoji-regex": "6.1.1" + "emoji-regex": ">=6.0.0 <=6.1.1" } }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } }, "glob-base": { @@ -5610,17 +8130,55 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } } }, "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } } }, "glob-stream": { @@ -5629,43 +8187,16 @@ "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", "dev": true, "requires": { - "extend": "3.0.1", - "glob": "7.1.2", - "glob-parent": "3.1.0", - "is-negated-glob": "1.0.0", - "ordered-read-streams": "1.0.1", - "pumpify": "1.3.5", - "readable-stream": "2.3.3", - "remove-trailing-separator": "1.1.0", - "to-absolute-glob": "2.0.1", - "unique-stream": "2.2.1" - }, - "dependencies": { - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" } }, "global-dirs": { @@ -5674,7 +8205,7 @@ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "requires": { - "ini": "1.3.5" + "ini": "^1.3.4" } }, "global-modules": { @@ -5683,44 +8214,34 @@ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { - "global-prefix": "1.0.2", - "is-windows": "1.0.1", - "resolve-dir": "1.0.1" - }, - "dependencies": { - "is-windows": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz", - "integrity": "sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk=", - "dev": true - } + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" } }, + "global-modules-path": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/global-modules-path/-/global-modules-path-2.3.0.tgz", + "integrity": "sha512-HchvMJNYh9dGSCy8pOQ2O8u/hoXaL+0XhnrwH0RyLiSXMMTl9W3N6KUU73+JFOg5PGjtzl6VZzUQsnrpm7Szag==", + "dev": true + }, "global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "homedir-polyfill": "1.0.1", - "ini": "1.3.5", - "is-windows": "1.0.1", - "which": "1.3.0" - }, - "dependencies": { - "is-windows": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz", - "integrity": "sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk=", - "dev": true - } + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" } }, "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "version": "11.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz", + "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==", "dev": true }, "globals-docs": { @@ -5730,50 +8251,63 @@ "dev": true }, "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } } }, "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", "dev": true, "requires": { - "create-error-class": "3.0.2", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", - "safe-buffer": "5.1.1", - "timed-out": "4.0.1", - "unzip-response": "2.0.1", - "url-parse-lax": "1.0.0" + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", "dev": true }, "growl": { @@ -5788,17 +8322,17 @@ "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", "dev": true, "requires": { - "convert-source-map": "1.5.1", - "graceful-fs": "4.1.11", - "strip-bom": "2.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" + "convert-source-map": "^1.1.1", + "graceful-fs": "^4.1.2", + "strip-bom": "^2.0.0", + "through2": "^2.0.0", + "vinyl": "^1.0.0" }, "dependencies": { "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, "clone-stats": { @@ -5819,7 +8353,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "vinyl": { @@ -5828,125 +8362,92 @@ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "dev": true, "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } } } }, - "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "gzip-size": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", + "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", "dev": true, "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "duplexer": "^0.1.1", + "pify": "^3.0.0" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + } + } + }, + "handlebars": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", + "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", + "dev": true, + "requires": { + "async": "^2.5.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", "dev": true, "optional": true }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, "optional": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true - } - } - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "optional": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" + "commander": "~2.17.1", + "source-map": "~0.6.1" } } } }, "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "dev": true }, "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.2.tgz", + "integrity": "sha512-OFxb5MZXCUMx43X7O8LK4FKggEQx6yC5QPmOcBnYbJ9UjxEcMcrMbaR0af5HZpqeFopw2GwQRQi34ZXI7YLM5w==", "dev": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "^6.5.5", + "har-schema": "^2.0.0" } }, "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -5955,22 +8456,22 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", "dev": true, "requires": { - "isarray": "0.0.1" + "isarray": "2.0.1" }, "dependencies": { "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "dev": true } } @@ -5982,28 +8483,41 @@ "dev": true }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -6012,73 +8526,54 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } }, "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", + "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "hast-util-is-element": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.0.0.tgz", - "integrity": "sha1-P3IWl4sq4U2YdJh4eCZ18zvjzgA=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.0.2.tgz", + "integrity": "sha512-4MEtyofNi3ZunPFrp9NpTQdNPN24xvLX3M+Lr/RGgPX6TLi+wR4/DqeoyQ7lwWcfUp4aevdt4RR0r7ZQPFbHxw==", "dev": true }, "hast-util-sanitize": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-1.1.2.tgz", - "integrity": "sha1-0QvWdXoh5ZwTq8iuNTDdO219Z54=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-1.2.1.tgz", + "integrity": "sha512-bRyZ316tTETfxkpM0De0Fk5slEtR5hvkzDGbHpEAjZRmfQyT3xMTzMk0/gGWlkqsfafFCaPNbrtPdZBPMK8X8A==", "dev": true, "requires": { - "xtend": "4.0.1" + "xtend": "^4.0.1" } }, "hast-util-to-html": { @@ -6087,37 +8582,25 @@ "integrity": "sha1-iCyZhJ5AEw6ZHAQuRW1FPZXDbP8=", "dev": true, "requires": { - "ccount": "1.0.2", - "comma-separated-tokens": "1.0.4", - "hast-util-is-element": "1.0.0", - "hast-util-whitespace": "1.0.0", - "html-void-elements": "1.0.2", - "kebab-case": "1.0.0", - "property-information": "3.2.0", - "space-separated-tokens": "1.1.1", - "stringify-entities": "1.3.1", - "unist-util-is": "2.1.1", - "xtend": "4.0.1" + "ccount": "^1.0.0", + "comma-separated-tokens": "^1.0.1", + "hast-util-is-element": "^1.0.0", + "hast-util-whitespace": "^1.0.0", + "html-void-elements": "^1.0.0", + "kebab-case": "^1.0.0", + "property-information": "^3.1.0", + "space-separated-tokens": "^1.0.0", + "stringify-entities": "^1.0.1", + "unist-util-is": "^2.0.0", + "xtend": "^4.0.1" } }, "hast-util-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.0.tgz", - "integrity": "sha1-vQlpGWJdKTbh/xe8Tff9cn8X7Ok=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.2.tgz", + "integrity": "sha512-4JT8B0HKPHBMFZdDQzexjxwhKx9TrpV/+uelvmqlPu8RqqDrnNIEHDtDZCmgE+4YmcFAtKVPLmnY3dQGRaN53A==", "dev": true }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", @@ -6125,9 +8608,9 @@ "dev": true }, "highlight.js": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", - "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=", + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", + "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==", "dev": true }, "hmac-drbg": { @@ -6136,26 +8619,22 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.0.2.tgz", + "integrity": "sha512-0RGPLkyxpsMJVj/iOCaJaIWFEch988eUicJJpRiQ+Or1CMvBXcoZPlSx9FhreDWw4hxMYy8xgTEdlsYQDTnxWA==", "dev": true }, "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-3.0.0.tgz", + "integrity": "sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs=", + "dev": true }, "homedir-polyfill": { "version": "1.0.1", @@ -6163,58 +8642,71 @@ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { - "parse-passwd": "1.0.0" + "parse-passwd": "^1.0.0" } }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true + }, "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", "dev": true }, "html-void-elements": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.2.tgz", - "integrity": "sha1-nSLgyjKsyVs/RbjVtPb73AWv/VU=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.3.tgz", + "integrity": "sha512-SaGhCDPXJVNrQyKMtKy24q6IMdXg5FCPN3z+xizxw9l+oXQw5fOoaj/ERU5KqWhSYhXtW5bWthlDbTDLBhJQrA==", + "dev": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", "dev": true }, "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "version": "1.6.3", + "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "1.1.1", + "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.4.0" + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" } }, "http-parser-js": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz", - "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", + "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", "dev": true }, "http-proxy": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", - "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "dev": true, "requires": { - "eventemitter3": "1.2.0", - "requires-port": "1.0.0" + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "https-browserify": { @@ -6223,6 +8715,16 @@ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, + "humanize-url": { + "version": "1.0.1", + "resolved": "http://registry.npmjs.org/humanize-url/-/humanize-url-1.0.1.tgz", + "integrity": "sha1-9KuZ4NKIF0yk4eUEB8VfuuRk7/8=", + "dev": true, + "requires": { + "normalize-url": "^1.0.0", + "strip-url-auth": "^1.0.0" + } + }, "hyphenate-style-name": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz", @@ -6230,29 +8732,111 @@ "dev": true }, "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } }, "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", "dev": true }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -6260,13 +8844,10 @@ "dev": true }, "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true }, "indexof": { "version": "0.0.1", @@ -6280,8 +8861,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -6298,12 +8879,12 @@ }, "inline-style-prefixer": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-2.0.5.tgz", + "resolved": "http://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-2.0.5.tgz", "integrity": "sha1-wVPH6I/YT+9cYC6VqBaLJ3BnH+c=", "dev": true, "requires": { - "bowser": "1.8.1", - "hyphenate-style-name": "1.0.2" + "bowser": "^1.0.0", + "hyphenate-style-name": "^1.0.1" } }, "inquirer": { @@ -6312,20 +8893,20 @@ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.3.0", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.1.0", - "figures": "2.0.0", - "lodash": "4.17.4", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" }, "dependencies": { "ansi-regex": { @@ -6346,8 +8927,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -6356,7 +8937,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -6366,8 +8947,8 @@ "resolved": "https://registry.npmjs.org/interface-connection/-/interface-connection-0.3.2.tgz", "integrity": "sha1-5JSYg/bqeft+3QHuP0/KR6Kf0sQ=", "requires": { - "pull-defer": "0.2.2", - "timed-tape": "0.1.1" + "pull-defer": "~0.2.2", + "timed-tape": "~0.1.1" } }, "interpret": { @@ -6376,13 +8957,23 @@ "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", "dev": true }, - "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "into-stream": { + "version": "3.1.0", + "resolved": "http://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", "dev": true, "requires": { - "loose-envify": "1.3.1" + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -6402,22 +8993,28 @@ "integrity": "sha512-7ay355oMN34iXhET1BmCJVsHjOTSItEEIIpOs38qUC23AIhOy+xIPnkrTuEFjeLMrTJ7m8KMXWgWfy/2Vn9sDw==", "requires": { "jsbn": "1.1.0", - "lodash.find": "4.6.0", - "lodash.max": "4.0.1", - "lodash.merge": "4.6.0", - "lodash.padstart": "4.6.1", - "lodash.repeat": "4.1.0", + "lodash.find": "^4.6.0", + "lodash.max": "^4.0.1", + "lodash.merge": "^4.6.0", + "lodash.padstart": "^4.6.1", + "lodash.repeat": "^4.1.0", "sprintf-js": "1.1.0" } }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", + "dev": true + }, "is-absolute": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "requires": { - "is-relative": "0.2.1", - "is-windows": "0.2.0" + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" } }, "is-accessor-descriptor": { @@ -6426,13 +9023,24 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-alphabetical": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.1.tgz", - "integrity": "sha1-x3B5zJHU76x3W+EDS/LSQ/lebwg=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", + "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==", "dev": true }, "is-alphanumeric": { @@ -6442,13 +9050,13 @@ "dev": true }, "is-alphanumerical": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz", - "integrity": "sha1-37SqTRCF4zvbYcLe6cgOnGwZ9Ts=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", + "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", "dev": true, "requires": { - "is-alphabetical": "1.0.1", - "is-decimal": "1.0.1" + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" } }, "is-arrayish": { @@ -6463,7 +9071,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -6474,11 +9082,26 @@ }, "is-builtin-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" } }, "is-data-descriptor": { @@ -6487,24 +9110,41 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "is-decimal": { + "is-date-object": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.1.tgz", - "integrity": "sha1-9ftqlJlq2ejjdh+/vQkfH8qMToI=", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-decimal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", + "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==", "dev": true }, "is-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.1.tgz", - "integrity": "sha512-G3fFVFTqfaqu7r4YuSBHKBAuOaLz8Sy7ekklUpFEliaLMP1Y2ZjoN9jS62YWCAPQrQpMUQSitRlrzibbuCZjdA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -6515,6 +9155,12 @@ } } }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, "is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", @@ -6527,7 +9173,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -6537,9 +9183,9 @@ "dev": true }, "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, "is-finite": { @@ -6548,7 +9194,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -6557,22 +9203,22 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^2.1.1" } }, "is-hexadecimal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz", - "integrity": "sha1-bghLvJIGH7sJcexYts5tQE4k2mk=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", + "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==", "dev": true }, "is-installed-globally": { @@ -6581,8 +9227,8 @@ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", "dev": true, "requires": { - "global-dirs": "0.1.1", - "is-path-inside": "1.0.1" + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" } }, "is-negated-glob": { @@ -6598,47 +9244,44 @@ "dev": true }, "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, - "is-observable": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz", - "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", - "dev": true, - "requires": { - "symbol-observable": "0.2.4" - } + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", + "dev": true }, - "is-odd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-1.0.0.tgz", - "integrity": "sha1-O4qTLrAos3dcObsJ6RdnrM22kIg=", + "is-observable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", + "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", "dev": true, "requires": { - "is-number": "3.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - } + "symbol-observable": "^1.1.0" } }, "is-path-cwd": { @@ -6648,12 +9291,12 @@ "dev": true }, "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -6662,7 +9305,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-obj": { @@ -6677,15 +9320,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + "isobject": "^3.0.1" } }, "is-posix-bracket": { @@ -6712,19 +9347,28 @@ "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", "dev": true }, - "is-relative": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "is-unc-path": "0.1.2" + "has": "^1.0.1" + } + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "requires": { + "is-unc-path": "^1.0.0" } }, "is-resolvable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.1.tgz", - "integrity": "sha512-y5CXYbzvB3jTnWAZH1Nl7ykUWb6T3BcTs56HUruwBf8MhF56n1HWqhDWnVFo8GHrUPDgvUUNVhrc2U8W7iqz5g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, "is-retry-allowed": { @@ -6739,7 +9383,7 @@ "integrity": "sha1-6+oRaaJhTaOSpjdANmw84EnY3/Y=", "dev": true, "requires": { - "protocols": "1.4.6" + "protocols": "^1.1.0" } }, "is-stream": { @@ -6754,13 +9398,22 @@ "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", "dev": true }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, "is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", "dev": true, "requires": { - "text-extensions": "1.7.0" + "text-extensions": "^1.0.0" } }, "is-typedarray": { @@ -6770,12 +9423,12 @@ "dev": true }, "is-unc-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, "requires": { - "unc-path-regex": "0.1.2" + "unc-path-regex": "^0.1.2" } }, "is-utf8": { @@ -6791,21 +9444,21 @@ "dev": true }, "is-whitespace-character": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz", - "integrity": "sha1-muAXbzKCtlRXoZks2whPil+DPjs=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz", + "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==", "dev": true }, "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, "is-word-character": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.1.tgz", - "integrity": "sha1-WgP6HqkazopusMfNdw64bWXIvvs=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz", + "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==", "dev": true }, "isarray": { @@ -6815,26 +9468,21 @@ "dev": true }, "isbinaryfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", - "dev": true - }, - "isemail": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.0.0.tgz", - "integrity": "sha512-rz0ng/c+fX+zACpLgDB8fnUQ845WSU06f4hlhk4K8TJxmR6f5hyvitu9a9JdMD7aq/P4E0XdG1uaab2OiXgHlA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", "dev": true, "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", - "dev": true - } + "buffer-alloc": "^1.2.0" + } + }, + "isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "dev": true, + "requires": { + "punycode": "2.x.x" } }, "isexe": { @@ -6844,13 +9492,10 @@ "dev": true }, "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "isomorphic-fetch": { "version": "2.2.1", @@ -6858,8 +9503,8 @@ "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "dev": true, "requires": { - "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.3" + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, "isstream": { @@ -6868,39 +9513,68 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "joi": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/joi/-/joi-13.0.2.tgz", - "integrity": "sha512-kVka3LaHQyENvcMW4WJPSepGM43oCofcKxfs9HbbKd/FrwBAAt4lNNTPKOzSMmV53GIspmNO4U3O2TzoGvxxCA==", + "istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.0.0.tgz", + "integrity": "sha512-eQY9vN9elYjdgN9Iv6NS/00bptm02EBBk70lRMaVjeA6QYocQgenVrSgC28TJurdnZa80AGO3ASdFN+w/njGiQ==", "dev": true, "requires": { - "hoek": "5.0.2", - "isemail": "3.0.0", - "topo": "3.0.0" - }, - "dependencies": { - "hoek": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.2.tgz", - "integrity": "sha512-NA10UYP9ufCtY2qYGkZktcQXwVyYK4zK0gkaFSB96xhtlo6V8tKXdQgx8eHolQTRemaW0uLn8BhjhwqrOU+QLQ==", - "dev": true - } + "@babel/generator": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "istanbul-lib-coverage": "^2.0.1", + "semver": "^5.5.0" } }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, + "joi": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/joi/-/joi-14.0.4.tgz", + "integrity": "sha512-KUXRcinDUMMbtlOk7YLGHQvG73dLyf8bmgE+6sBTkdJbZpeGVGAlPXEHLiQBV7KinD/VLD5OA0EUgoTTfbRAJQ==", + "dev": true, + "requires": { + "hoek": "6.x.x", + "isemail": "3.x.x", + "topo": "3.x.x" + } + }, + "js-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.4.tgz", + "integrity": "sha512-PxfGzSs0ztShKrUYPIn5r0MtyAhYcCwmndozzpz8YObbPnD1jFxzlBGbRnX2mIu6Z13xN6+PTu05TQFnZFlzow==", + "dev": true + }, "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsbn": { @@ -6909,9 +9583,15 @@ "integrity": "sha1-sBMHyym2GKHtJux56RH4A8TaAEA=" }, "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "dev": true }, "json-loader": { @@ -6921,9 +9601,9 @@ "dev": true }, "json-parse-better-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz", - "integrity": "sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-schema": { @@ -6933,9 +9613,9 @@ "dev": true }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json-stable-stringify": { @@ -6944,7 +9624,7 @@ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stable-stringify-without-jsonify": { @@ -6959,15 +9639,9 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, "json5": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, @@ -6977,9 +9651,9 @@ "integrity": "sha512-48n9HTL6Vxhr6WqX78ROH5NddK//ZnSdu1ZnPyyOl9IzF2PyRmwC8nCKPiRFo1wx7/Byq5YezCqokq9T/McLhw==", "dev": true, "requires": { - "jsonparse": "1.3.1", - "readable-stream": "2.3.3", - "shortid": "2.2.8" + "jsonparse": "^1.2.0", + "readable-stream": "^2.1.4", + "shortid": "^2.2.6" } }, "jsonfile": { @@ -6988,7 +9662,7 @@ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jsonify": { @@ -7013,65 +9687,54 @@ "extsprintf": "1.3.0", "json-schema": "0.2.3", "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } } }, "karma": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", - "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.1.tgz", + "integrity": "sha512-NetT3wPCQMNB36uiL9LLyhrOt8SQwrEKt0xD3+KpTCfm0VxVyUJdPL5oTq2Ic5ouemgL/Iz4wqXEbF3zea9kQQ==", "dev": true, "requires": { - "bluebird": "3.5.1", - "body-parser": "1.18.2", - "chokidar": "1.7.0", - "colors": "1.1.2", - "combine-lists": "1.0.1", - "connect": "3.6.5", - "core-js": "2.5.3", - "di": "0.0.1", - "dom-serialize": "2.2.1", - "expand-braces": "0.1.2", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "http-proxy": "1.16.2", - "isbinaryfile": "3.0.2", - "lodash": "3.10.1", - "log4js": "0.6.38", - "mime": "1.6.0", - "minimatch": "3.0.4", - "optimist": "0.6.1", - "qjobs": "1.1.5", - "range-parser": "1.2.0", - "rimraf": "2.6.2", - "safe-buffer": "5.1.1", - "socket.io": "1.7.3", - "source-map": "0.5.7", - "tmp": "0.0.31", + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "chokidar": "^2.0.3", + "colors": "^1.1.0", + "combine-lists": "^1.0.0", + "connect": "^3.6.0", + "core-js": "^2.2.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "expand-braces": "^0.1.1", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^4.17.4", + "log4js": "^3.0.0", + "mime": "^2.3.1", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", + "socket.io": "2.1.1", + "source-map": "^0.6.1", + "tmp": "0.0.33", "useragent": "2.2.1" }, "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "mime": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", "dev": true }, - "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -7081,8 +9744,17 @@ "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", "dev": true, "requires": { - "fs-access": "1.0.1", - "which": "1.3.0" + "fs-access": "^1.0.0", + "which": "^1.2.1" + } + }, + "karma-edge-launcher": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/karma-edge-launcher/-/karma-edge-launcher-0.4.2.tgz", + "integrity": "sha512-YAJZb1fmRcxNhMIWYsjLuxwODBjh2cSHgTW/jkVmdpGguJjLbs9ZgIK/tEJsMQcBLUkO+yO4LBbqYxqgGW2HIw==", + "dev": true, + "requires": { + "edge-launcher": "1.2.2" } }, "karma-firefox-launcher": { @@ -7091,6 +9763,16 @@ "integrity": "sha512-LbZ5/XlIXLeQ3cqnCbYLn+rOVhuMIK9aZwlP6eOLGzWdo1UVp7t6CN3DP4SafiRLjexKwHeKHDm0c38Mtd3VxA==", "dev": true }, + "karma-junit-reporter": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/karma-junit-reporter/-/karma-junit-reporter-1.2.0.tgz", + "integrity": "sha1-T5xAzt+xo5X4rvh2q/lhiZF8Y5Y=", + "dev": true, + "requires": { + "path-is-absolute": "^1.0.0", + "xmlbuilder": "8.2.2" + } + }, "karma-mocha": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", @@ -7102,7 +9784,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -7110,6 +9792,7 @@ }, "karma-mocha-own-reporter": { "version": "git+https://github.com/dryajov/karma-mocha-own-reporter.git#d562a92a12d5c76469a05d67cee19bcb8db22b23", + "from": "git+https://github.com/dryajov/karma-mocha-own-reporter.git#d562a92a12d5c76469a05d67cee19bcb8db22b23", "dev": true }, "karma-mocha-webworker": { @@ -7118,8 +9801,8 @@ "integrity": "sha1-taQwG1m6hqCO5bXwrvHtuGO+yyY=", "dev": true, "requires": { - "jsonbird": "2.2.2", - "minimatch": "3.0.4" + "jsonbird": "^2.0.0", + "minimatch": "^3.0.3" } }, "karma-sourcemap-loader": { @@ -7128,34 +9811,21 @@ "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.2" } }, "karma-webpack": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-2.0.7.tgz", - "integrity": "sha512-cE7tZbuxjPXzRXyp/GsDla2p0SRNqih5Yj0ptXA7xYrUChYr1QsMUw7D3rTmZgeaXOUnBr4nOfqqwOdfnWWCfA==", + "version": "4.0.0-beta.0", + "resolved": "http://registry.npmjs.org/karma-webpack/-/karma-webpack-4.0.0-beta.0.tgz", + "integrity": "sha512-3mBfzOSnWdlMNtIIFpZ0/fGbXCq6dko0HOnwU7nntpNu7tTcY7/JbaWV8bxvmIre+yNUPIglq7p3EuwXj35BmA==", "dev": true, "requires": { - "async": "0.9.2", - "loader-utils": "0.2.17", - "lodash": "3.10.1", - "source-map": "0.5.7", - "webpack-dev-middleware": "1.12.2" - }, - "dependencies": { - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } + "async": "^2.0.0", + "babel-runtime": "^6.0.0", + "loader-utils": "^1.0.0", + "lodash": "^4.0.0", + "source-map": "^0.5.6", + "webpack-dev-middleware": "^3.0.1" } }, "kebab-case": { @@ -7164,31 +9834,34 @@ "integrity": "sha1-P55JkK3K0MaGwOcB92RYaPdfkes=", "dev": true }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "keypress": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.2.1.tgz", + "integrity": "sha1-HoBFQlABjbrUw/6USX1uZ7YmnHc=", + "dev": true + }, + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", "dev": true, "requires": { - "is-buffer": "1.1.6" + "json-buffer": "3.0.0" } }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, "latest-version": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "dev": true, "requires": { - "package-json": "4.0.1" - } - }, - "lazy-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", - "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", - "dev": true, - "requires": { - "set-getter": "0.1.0" + "package-json": "^4.0.0" } }, "lazystream": { @@ -7197,7 +9870,7 @@ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.5" } }, "lcid": { @@ -7206,22 +9879,16 @@ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, - "lcov-parse": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", - "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", - "dev": true - }, "lead": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", "dev": true, "requires": { - "flush-write-stream": "1.0.2" + "flush-write-stream": "^1.0.2" } }, "levn": { @@ -7230,83 +9897,63 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "libp2p-tcp": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/libp2p-tcp/-/libp2p-tcp-0.11.1.tgz", - "integrity": "sha512-8CFykuSedjOqtFhT1X82M7cW+4PDCgnUK5ygkg/vSaQqKdRWMBtVqGId2mCCOJ2aP/nGJ0kp/bP904napI9XKQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/libp2p-tcp/-/libp2p-tcp-0.13.0.tgz", + "integrity": "sha512-bsmfxi+uVegK61x9UxBEgWtvujPl+zwzuVEyaVRs2IxHu6OE5MGKnj7AflzlK4e3w2HZn8nm4qwMV5m+fhqK1g==", "requires": { - "interface-connection": "0.3.2", - "ip-address": "5.8.9", - "lodash.includes": "4.3.0", - "lodash.isfunction": "3.0.8", - "mafmt": "3.0.2", - "multiaddr": "3.0.1", - "once": "1.4.0", - "stream-to-pull-stream": "1.7.2" + "class-is": "^1.1.0", + "debug": "^3.1.0", + "interface-connection": "~0.3.2", + "ip-address": "^5.8.9", + "lodash.includes": "^4.3.0", + "lodash.isfunction": "^3.0.9", + "mafmt": "^6.0.2", + "multiaddr": "^5.0.0", + "once": "^1.4.0", + "stream-to-pull-stream": "^1.7.2" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } } }, "listr": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz", - "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.2.tgz", + "integrity": "sha512-vmaNJ1KlGuGWShHI35X/F8r9xxS0VTHh9GejVXwSN20fG5xpq3Jh4bJbnumoT6q5EDM/8/YP1z3YMtQbFmhuXw==", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "figures": "1.7.0", - "indent-string": "2.1.0", - "is-observable": "0.2.0", - "is-promise": "2.1.0", - "is-stream": "1.1.0", - "listr-silent-renderer": "1.1.1", - "listr-update-renderer": "0.4.0", - "listr-verbose-renderer": "0.4.1", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "ora": "0.2.3", - "p-map": "1.2.0", - "rxjs": "5.5.5", - "stream-to-observable": "0.2.0", - "strip-ansi": "3.0.1" + "@samverschueren/stream-to-observable": "^0.3.0", + "is-observable": "^1.1.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.4.0", + "listr-verbose-renderer": "^0.4.0", + "p-map": "^1.1.1", + "rxjs": "^6.1.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", "dev": true } } @@ -7323,14 +9970,14 @@ "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "elegant-spinner": "1.0.1", - "figures": "1.7.0", - "indent-string": "3.2.0", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "strip-ansi": "3.0.1" + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-styles": { @@ -7341,15 +9988,15 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "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" } }, "figures": { @@ -7358,16 +10005,10 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -7382,10 +10023,10 @@ "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "date-fns": "1.29.0", - "figures": "1.7.0" + "chalk": "^1.1.3", + "cli-cursor": "^1.0.2", + "date-fns": "^1.27.2", + "figures": "^1.7.0" }, "dependencies": { "ansi-styles": { @@ -7396,15 +10037,15 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "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" } }, "cli-cursor": { @@ -7413,7 +10054,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "figures": { @@ -7422,13 +10063,13 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "onetime": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, @@ -7438,8 +10079,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } }, "supports-color": { @@ -7451,9 +10092,9 @@ } }, "livereload-js": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz", - "integrity": "sha1-bIclfmSKtHW8JOoldFftzB+NC8I=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", + "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", "dev": true }, "load-json-file": { @@ -7462,28 +10103,35 @@ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "loader-runner": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz", + "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==", "dev": true }, "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -7492,14 +10140,14 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, "lodash._reinterpolate": { "version": "3.0.0", @@ -7507,10 +10155,16 @@ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", "dev": true }, - "lodash.cond": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, "lodash.filter": { @@ -7535,9 +10189,15 @@ "dev": true }, "lodash.isfunction": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.8.tgz", - "integrity": "sha1-TbcJ/IG8So/XEnpFilNGxc3OLGs=" + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", + "dev": true }, "lodash.map": { "version": "4.6.0", @@ -7550,28 +10210,58 @@ "integrity": "sha1-hzVWbGGLNan3YFILSHrnllivE2o=" }, "lodash.merge": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz", - "integrity": "sha1-aYhLoUSsM/5plzemCG3v+t0PicU=" + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==" + }, + "lodash.mergewith": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", + "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", + "dev": true + }, + "lodash.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", + "dev": true }, "lodash.padstart": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "dev": true + }, "lodash.repeat": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-4.1.0.tgz", "integrity": "sha1-/H3oEx2MisB+S0n3T/6CnR8r7EQ=" }, + "lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=", + "dev": true + }, + "lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha1-lDbjTtJgk+1/+uGTYUQ1CRXZrdg=", + "dev": true + }, "lodash.template": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", "dev": true, "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.templatesettings": "4.1.0" + "lodash._reinterpolate": "~3.0.0", + "lodash.templatesettings": "^4.0.0" } }, "lodash.templatesettings": { @@ -7580,13 +10270,19 @@ "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", "dev": true, "requires": { - "lodash._reinterpolate": "3.0.0" + "lodash._reinterpolate": "~3.0.0" } }, - "log-driver": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", - "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=", + "lodash.topairs": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.topairs/-/lodash.topairs-4.3.0.tgz", + "integrity": "sha1-O23qo31g+xFnE8RsXxfqGQ7EjWQ=", + "dev": true + }, + "lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha1-E2Xt9DFIBIHvDRxolXpe2Z1J984=", "dev": true }, "log-symbols": { @@ -7595,7 +10291,7 @@ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.0.0" }, "dependencies": { "ansi-styles": { @@ -7606,15 +10302,15 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "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" } }, "supports-color": { @@ -7631,13 +10327,13 @@ "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", "dev": true, "requires": { - "ansi-escapes": "1.4.0", - "cli-cursor": "1.0.2" + "ansi-escapes": "^1.0.0", + "cli-cursor": "^1.0.2" }, "dependencies": { "ansi-escapes": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", "dev": true }, @@ -7647,12 +10343,12 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "onetime": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, @@ -7662,60 +10358,48 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } } } }, "log4js": { - "version": "0.6.38", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", - "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz", + "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==", "dev": true, "requires": { - "readable-stream": "1.0.34", - "semver": "4.3.6" + "circular-json": "^0.5.5", + "date-format": "^1.2.0", + "debug": "^3.1.0", + "rfdc": "^1.1.2", + "streamroller": "0.7.0" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "circular-json": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz", + "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==", "dev": true }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "ms": "^2.1.1" } }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true } } }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, "longest-streak": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz", @@ -7728,12 +10412,12 @@ "integrity": "sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k=" }, "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0 || ^4.0.0" } }, "loud-rejection": { @@ -7742,41 +10426,58 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true }, "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "mafmt": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-3.0.2.tgz", - "integrity": "sha512-BUXP1OceVN2/t2SiMH8iNTGQZ4BQK4iVWUEIT/dIyUqHypiAcUZvtW5u+CSHGcmNT2KopqDkPzhWu1K7Fy8pqg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-6.0.2.tgz", + "integrity": "sha512-+ydrVDp/bo2GPTNN0378AFX66IJBlbrIBY0RaILWC9AICr9kviX5fonHeKsZiesEuuYetQeRhnZPL/J2k8vHAA==", "requires": { - "multiaddr": "3.0.1" + "multiaddr": "^5.0.0" } }, "make-dir": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", - "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "map-age-cleaner": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz", + "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" } }, "map-cache": { @@ -7786,9 +10487,9 @@ "dev": true }, "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", "dev": true }, "map-visit": { @@ -7797,60 +10498,54 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "markdown-escapes": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.1.tgz", - "integrity": "sha1-GZTfLTr0gR3lmmcUk0wrIpJzRRg=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz", + "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==", "dev": true }, "markdown-table": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.1.tgz", - "integrity": "sha1-Sz3ToTPRUYuO8NvHCb8qG0gkvIw=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.2.tgz", + "integrity": "sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==", + "dev": true + }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", "dev": true }, "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - } + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "mdast-util-compact": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz", - "integrity": "sha1-zbX4TitqLTEU3zO9BdnLMuPECDo=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.2.tgz", + "integrity": "sha512-d2WS98JSDVbpSsBfVvD9TaDMlqPRz7ohM/11G0rp5jOBb5q96RJ6YLszQ/09AAixyzh23FeIpCGqfaamEADtWg==", "dev": true, "requires": { - "unist-util-modify-children": "1.1.1", - "unist-util-visit": "1.3.0" + "unist-util-visit": "^1.1.0" } }, "mdast-util-definitions": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-1.2.2.tgz", - "integrity": "sha512-9NloPSwaB9f1PKcGqaScfqRf6zKOEjTIXVIbPOmgWI/JKxznlgVXC5C+8qgl3AjYg2vJBRgLYfLICaNiac89iA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-1.2.3.tgz", + "integrity": "sha512-P6wpRO8YVQ1iv30maMc93NLh7COvufglBE8/ldcOyYmk5EbfF0YeqlLgtqP/FOBU501Kqar1x5wYWwB3Nga74g==", "dev": true, "requires": { - "unist-util-visit": "1.3.0" + "unist-util-visit": "^1.0.0" } }, "mdast-util-inject": { @@ -7859,43 +10554,43 @@ "integrity": "sha1-2wa4tYW+lZotzS+H9HK6m3VvNnU=", "dev": true, "requires": { - "mdast-util-to-string": "1.0.4" + "mdast-util-to-string": "^1.0.0" } }, "mdast-util-to-hast": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-3.0.0.tgz", - "integrity": "sha512-zvEXH2AUevWfKuBqtEPNcDUPI8UC6yIVvgEgNi1v1dLnzb5Pfm+PZjnZn0FhW1WmHcrGMX059MAoqicEauzjcw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-3.0.4.tgz", + "integrity": "sha512-/eIbly2YmyVgpJNo+bFLLMCI1XgolO/Ffowhf+pHDq3X4/V6FntC9sGQCDLM147eTS+uSXv5dRzJyFn+o0tazA==", "dev": true, "requires": { - "collapse-white-space": "1.0.3", - "detab": "2.0.1", - "mdast-util-definitions": "1.2.2", - "mdurl": "1.0.1", + "collapse-white-space": "^1.0.0", + "detab": "^2.0.0", + "mdast-util-definitions": "^1.2.0", + "mdurl": "^1.0.1", "trim": "0.0.1", - "trim-lines": "1.1.0", - "unist-builder": "1.0.2", - "unist-util-generated": "1.1.1", - "unist-util-position": "3.0.0", - "unist-util-visit": "1.3.0", - "xtend": "4.0.1" + "trim-lines": "^1.0.0", + "unist-builder": "^1.0.1", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.0", + "xtend": "^4.0.1" } }, "mdast-util-to-string": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.0.4.tgz", - "integrity": "sha1-XEVch4yTVfDB5/PotxnPWDaRrPs=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.0.5.tgz", + "integrity": "sha512-2qLt/DEOo5F6nc2VFScQiHPzQ0XXcabquRJxKMhKte8nt42o08HUxNDPk7tt0YPxnWjAT11I1SYi0X0iPnfI5A==", "dev": true }, "mdast-util-toc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-toc/-/mdast-util-toc-2.0.1.tgz", - "integrity": "sha1-sdLLI7+wH4Evp7Vb/+iwqL7fbyE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-toc/-/mdast-util-toc-3.0.0.tgz", + "integrity": "sha512-rdpar0+u7H8RpsxVagGUG11VEaxkWlDefGMarG+6xDurTnkD14DMTDo9FQ1lCC3oElzwF3+EEsfeAd/wHrIjoQ==", "dev": true, "requires": { - "github-slugger": "1.2.0", - "mdast-util-to-string": "1.0.4", - "unist-util-visit": "1.3.0" + "github-slugger": "^1.1.1", + "mdast-util-to-string": "^1.0.2", + "unist-util-visit": "^1.1.0" } }, "mdurl": { @@ -7906,7 +10601,7 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, @@ -7916,7 +10611,7 @@ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "^1.0.0" } }, "memory-fs": { @@ -7925,290 +10620,85 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.6", - "readable-stream": "2.3.3" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", + "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", "dev": true, "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" }, "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" } } } }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, "merge-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.1" } }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, "micromatch": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.4.tgz", - "integrity": "sha512-kFRtviKYoAJT+t7HggMl0tBFGNAKLw/S7N+CO9qfEQyisob1Oy4pao+geRbkyeEd+V9aOkvZ4mhuyPvI/q9Sfg==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.0", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "extglob": "2.0.2", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.6", - "object.pick": "1.3.0", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.0.tgz", - "integrity": "sha512-P4O8UQRdGiMLWSizsApmXVQDBS6KCt7dSexgLKBmH5Hr1CZq7vsnscFh8oR1sP1ab1Zj0uCHCEzZeV6SfUf3rA==", - "dev": true, - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.1", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.1" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - } - } - }, - "extglob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.2.tgz", - "integrity": "sha512-I0+eZBH+jFGL8F5BnIz2ON2nKCjTS3AS3H/5PeSmCp7UVC70Ym8IhdRiQly2juKYQ//f7z1aj1BRpQniFJoU1w==", - "dev": true, - "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "miller-rabin": { @@ -8217,8 +10707,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { @@ -8228,30 +10718,36 @@ "dev": true }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", "dev": true }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "dev": true, "requires": { - "mime-db": "1.30.0" + "mime-db": "~1.37.0" } }, "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true }, "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "minimalistic-crypto-utils": { @@ -8266,23 +10762,51 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, - "mixin-deep": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.0.tgz", - "integrity": "sha512-dgaCvoh6i1nosAUBKb0l0pfJ78K8+S9fluyIR2YvAeUD/QuMahnFnF3xYty5eYXMjhGSsB0DsW6A0uAZyetoAg==", + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -8291,14 +10815,14 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { @@ -8306,23 +10830,36 @@ } }, "mocha": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.0.1.tgz", - "integrity": "sha512-evDmhkoA+cBNiQQQdSKZa2b9+W2mpLoj50367lhy+Klnx9OV8XlCIhigUnn1gaTFLQCa0kdNhEGDr0hCXOQFDw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", "dev": true, "requires": { - "browser-stdout": "1.3.0", - "commander": "2.11.0", + "browser-stdout": "1.3.1", + "commander": "2.15.1", "debug": "3.1.0", - "diff": "3.3.1", + "diff": "3.5.0", "escape-string-regexp": "1.0.5", "glob": "7.1.2", - "growl": "1.10.3", + "growl": "1.10.5", "he": "1.1.1", + "minimatch": "3.0.4", "mkdirp": "0.5.1", - "supports-color": "4.4.0" + "supports-color": "5.4.0" }, "dependencies": { + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "commander": { + "version": "2.15.1", + "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -8333,48 +10870,88 @@ } }, "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "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" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^3.0.0" } } } }, + "mocha-jenkins-reporter": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/mocha-jenkins-reporter/-/mocha-jenkins-reporter-0.4.1.tgz", + "integrity": "sha512-IqnIylrkKJG0lxeoawRkhv/uiYojMEw3o9TQOpDFarPYKVq4ymngVPwsyfMB0XMDqtDbOTOCviFg8xOLHb80/Q==", + "dev": true, + "requires": { + "diff": "1.0.7", + "mkdirp": "0.5.1", + "mocha": "^5.2.0", + "xml": "^1.0.1" + }, + "dependencies": { + "diff": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.0.7.tgz", + "integrity": "sha1-JLuwAcSn1VIhaefKvbLCgU7ZHPQ=", + "dev": true + } + } + }, "modify-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.0.tgz", - "integrity": "sha1-4rbN65zhn5kxelNyLz2/XfXqqrI=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true }, "module-deps-sortable": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/module-deps-sortable/-/module-deps-sortable-4.0.6.tgz", + "resolved": "http://registry.npmjs.org/module-deps-sortable/-/module-deps-sortable-4.0.6.tgz", "integrity": "sha1-ElGkuixEqS32mJvQKdoSGk8hCbA=", "dev": true, "requires": { - "JSONStream": "1.3.1", - "browser-resolve": "1.11.2", - "concat-stream": "1.5.2", - "defined": "1.0.0", - "detective": "4.7.0", - "duplexer2": "0.1.4", - "inherits": "2.0.3", - "parents": "1.0.1", - "readable-stream": "2.3.3", - "resolve": "1.5.0", - "stream-combiner2": "1.1.1", - "subarg": "1.0.0", - "through2": "2.0.3", - "xtend": "4.0.1" + "JSONStream": "^1.0.3", + "browser-resolve": "^1.7.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" }, "dependencies": { "concat-stream": { @@ -8383,27 +10960,33 @@ "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.0.6", - "typedarray": "0.0.6" + "inherits": "~2.0.1", + "readable-stream": "~2.0.0", + "typedarray": "~0.0.5" }, "dependencies": { "readable-stream": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" + "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" } } } }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", @@ -8412,6 +10995,20 @@ } } }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -8419,16 +11016,18 @@ "dev": true }, "multiaddr": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-3.0.1.tgz", - "integrity": "sha512-MnEf7gozRpX+x5sVl38lwv59YX9/HBojJuunINH+ko1/k11RMe3igA2oAOea1wVDltD5xkDnsoVxWnFiRxsScw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-5.0.2.tgz", + "integrity": "sha512-dXz1chaUHV6L6okujDLS7uRA6NmCbitpikOJA0vMMnrwVyai5kC3ot2CSLrSfj3B8XIgNzpe/j5auSYrnbGGzA==", "requires": { - "bs58": "4.0.1", - "ip": "1.1.5", - "lodash.filter": "4.6.0", - "lodash.map": "4.6.0", - "varint": "5.0.0", - "xtend": "4.0.1" + "bs58": "^4.0.1", + "class-is": "^1.1.0", + "ip": "^1.1.5", + "ip-address": "^5.8.9", + "lodash.filter": "^4.6.0", + "lodash.map": "^4.6.0", + "varint": "^5.0.0", + "xtend": "^4.0.1" } }, "mute-stream": { @@ -8438,51 +11037,52 @@ "dev": true }, "nan": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", - "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", + "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", "dev": true, "optional": true }, + "nanoid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.0.0.tgz", + "integrity": "sha512-SG2qscLE3iM4C0CNzGrsAojJHSVHMS1J8NnvJ31P1lH8P0hGHOiafmniNJz6w6q7vuoDlV7RdySlJgtqkFEVtQ==", + "dev": true + }, "nanomatch": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.6.tgz", - "integrity": "sha512-WJ6XTCbvWXUFPbi/bDwKcYkCeOGUHzaJj72KbuPqGn78Ba/F5Vu26Zlo6SuMQbCIst1RGKL1zfWBCOGAlbRLAg==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "is-odd": "1.0.0", - "kind-of": "5.1.0", - "object.pick": "1.3.0", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, + "native-or-another": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/native-or-another/-/native-or-another-2.0.0.tgz", + "integrity": "sha1-F6Vn+Svuqc1xrP+Wp2gac17KO/8=", + "dev": true, + "requires": { + "native-or-bluebird": "^1.1.2" + } + }, + "native-or-bluebird": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/native-or-bluebird/-/native-or-bluebird-1.2.0.tgz", + "integrity": "sha1-OcR7/Xgl0fuf+tMiEK4l2q3xAck=", + "dev": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -8495,14 +11095,26 @@ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", "dev": true }, + "neo-async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "dev": true, "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, "node-libs-browser": { @@ -8511,29 +11123,65 @@ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.1.7", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.3", - "stream-browserify": "2.0.1", - "stream-http": "2.7.2", - "string_decoder": "1.0.3", - "timers-browserify": "2.0.4", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + } + } + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-releases": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.3.tgz", + "integrity": "sha512-ZaZWMsbuDcetpHmYeKWPO6e63pSXLb50M7lJgCbcM2nC/nQC3daNifmtp5a2kp7EWwYfhuvH6zLPWkrF8IiDdw==", + "dev": true, + "requires": { + "semver": "^5.3.0" } }, "normalize-package-data": { @@ -8542,10 +11190,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -8554,7 +11202,19 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" + } + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" } }, "now-and-later": { @@ -8563,16 +11223,16 @@ "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.3.2" } }, "npm-path": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.3.tgz", - "integrity": "sha1-Fc/04ciaONp39W9gVbJPl137K74=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", + "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", "dev": true, "requires": { - "which": "1.3.0" + "which": "^1.2.10" } }, "npm-run-path": { @@ -8581,7 +11241,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "npm-which": { @@ -8590,9 +11250,9 @@ "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", "dev": true, "requires": { - "commander": "2.11.0", - "npm-path": "2.0.3", - "which": "1.3.0" + "commander": "^2.9.0", + "npm-path": "^2.0.2", + "which": "^1.2.10" } }, "null-check": { @@ -8608,38 +11268,36 @@ "dev": true }, "nyc": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.3.0.tgz", - "integrity": "sha512-oUu0WHt1k/JMIODvAYXX6C50Mupw2GO34P/Jdg2ty9xrLufBthHiKR2gf08aF+9S0abW1fl24R7iKRBXzibZmg==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.1.0.tgz", + "integrity": "sha512-3GyY6TpQ58z9Frpv4GMExE1SV2tAgYqC7HSy2omEhNiCT3mhT9NyiOvIE8zkbuJVFzmvvNTnE4h/7/wQae7xLg==", "dev": true, "requires": { - "archy": "1.0.0", - "arrify": "1.0.1", - "caching-transform": "1.0.1", - "convert-source-map": "1.5.0", - "debug-log": "1.0.1", - "default-require-extensions": "1.0.0", - "find-cache-dir": "0.1.1", - "find-up": "2.1.0", - "foreground-child": "1.5.6", - "glob": "7.1.2", - "istanbul-lib-coverage": "1.1.1", - "istanbul-lib-hook": "1.1.0", - "istanbul-lib-instrument": "1.9.1", - "istanbul-lib-report": "1.1.2", - "istanbul-lib-source-maps": "1.2.2", - "istanbul-reports": "1.1.3", - "md5-hex": "1.3.0", - "merge-source-map": "1.0.4", - "micromatch": "2.3.11", - "mkdirp": "0.5.1", - "resolve-from": "2.0.0", - "rimraf": "2.6.2", - "signal-exit": "3.0.2", - "spawn-wrap": "1.3.8", - "test-exclude": "4.1.1", - "yargs": "10.0.3", - "yargs-parser": "8.0.0" + "archy": "^1.0.0", + "arrify": "^1.0.1", + "caching-transform": "^2.0.0", + "convert-source-map": "^1.6.0", + "debug-log": "^1.0.1", + "find-cache-dir": "^2.0.0", + "find-up": "^3.0.0", + "foreground-child": "^1.5.6", + "glob": "^7.1.3", + "istanbul-lib-coverage": "^2.0.1", + "istanbul-lib-hook": "^2.0.1", + "istanbul-lib-instrument": "^3.0.0", + "istanbul-lib-report": "^2.0.2", + "istanbul-lib-source-maps": "^2.0.1", + "istanbul-reports": "^2.0.1", + "make-dir": "^1.3.0", + "merge-source-map": "^1.1.0", + "resolve-from": "^4.0.0", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "spawn-wrap": "^1.4.2", + "test-exclude": "^5.0.0", + "uuid": "^3.3.2", + "yargs": "11.1.0", + "yargs-parser": "^9.0.2" }, "dependencies": { "align-text": { @@ -8647,9 +11305,9 @@ "bundled": true, "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "amdefine": { @@ -8658,21 +11316,16 @@ "dev": true }, "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", + "version": "3.0.0", "bundled": true, "dev": true }, "append-transform": { - "version": "0.4.0", + "version": "1.0.0", "bundled": true, "dev": true, "requires": { - "default-require-extensions": "1.0.0" + "default-require-extensions": "^2.0.0" } }, "archy": { @@ -8680,24 +11333,6 @@ "bundled": true, "dev": true }, - "arr-diff": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, "arrify": { "version": "1.0.1", "bundled": true, @@ -8708,129 +11343,34 @@ "bundled": true, "dev": true }, - "babel-code-frame": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-generator": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "bundled": true, - "dev": true - }, "balanced-match": { "version": "1.0.0", "bundled": true, "dev": true }, "brace-expansion": { - "version": "1.1.8", + "version": "1.1.11", "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "braces": { - "version": "1.8.5", - "bundled": true, - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, "builtin-modules": { "version": "1.1.1", "bundled": true, "dev": true }, "caching-transform": { - "version": "1.0.1", + "version": "2.0.0", "bundled": true, "dev": true, "requires": { - "md5-hex": "1.3.0", - "mkdirp": "0.5.1", - "write-file-atomic": "1.3.4" + "make-dir": "^1.0.0", + "md5-hex": "^2.0.0", + "package-hash": "^2.0.0", + "write-file-atomic": "^2.0.0" } }, "camelcase": { @@ -8845,20 +11385,8 @@ "dev": true, "optional": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, - "chalk": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "cliui": { @@ -8867,8 +11395,8 @@ "dev": true, "optional": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" }, "dependencies": { @@ -8896,26 +11424,24 @@ "dev": true }, "convert-source-map": { - "version": "1.5.0", + "version": "1.6.0", "bundled": true, - "dev": true - }, - "core-js": { - "version": "2.5.1", - "bundled": true, - "dev": true + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } }, "cross-spawn": { "version": "4.0.2", "bundled": true, "dev": true, "requires": { - "lru-cache": "4.1.1", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "which": "^1.2.9" } }, "debug": { - "version": "2.6.9", + "version": "3.1.0", "bundled": true, "dev": true, "requires": { @@ -8933,36 +11459,23 @@ "dev": true }, "default-require-extensions": { - "version": "1.0.0", + "version": "2.0.0", "bundled": true, "dev": true, "requires": { - "strip-bom": "2.0.0" - } - }, - "detect-indent": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "repeating": "2.0.1" + "strip-bom": "^3.0.0" } }, "error-ex": { - "version": "1.3.1", + "version": "1.3.2", "bundled": true, "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, - "escape-string-regexp": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "esutils": { - "version": "2.0.2", + "es6-error": { + "version": "4.1.1", "bundled": true, "dev": true }, @@ -8971,13 +11484,13 @@ "bundled": true, "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "dependencies": { "cross-spawn": { @@ -8985,83 +11498,29 @@ "bundled": true, "dev": true, "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } } } }, - "expand-brackets": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "bundled": true, - "dev": true, - "requires": { - "fill-range": "2.2.3" - } - }, - "extglob": { - "version": "0.3.2", - "bundled": true, - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "filename-regex": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "fill-range": { - "version": "2.2.3", - "bundled": true, - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } - }, "find-cache-dir": { - "version": "0.1.1", + "version": "2.0.0", "bundled": true, "dev": true, "requires": { - "commondir": "1.0.1", - "mkdirp": "0.5.1", - "pkg-dir": "1.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^3.0.0" } }, "find-up": { - "version": "2.1.0", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "locate-path": "2.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "for-own": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "requires": { - "for-in": "1.0.2" + "locate-path": "^3.0.0" } }, "foreground-child": { @@ -9069,8 +11528,8 @@ "bundled": true, "dev": true, "requires": { - "cross-spawn": "4.0.2", - "signal-exit": "3.0.2" + "cross-spawn": "^4", + "signal-exit": "^3.0.0" } }, "fs.realpath": { @@ -9079,7 +11538,7 @@ "dev": true }, "get-caller-file": { - "version": "1.0.2", + "version": "1.0.3", "bundled": true, "dev": true }, @@ -9089,40 +11548,18 @@ "dev": true }, "glob": { - "version": "7.1.2", + "version": "7.1.3", "bundled": true, "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } }, - "glob-base": { - "version": "0.3.0", - "bundled": true, - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "globals": { - "version": "9.18.0", - "bundled": true, - "dev": true - }, "graceful-fs": { "version": "4.1.11", "bundled": true, @@ -9133,10 +11570,10 @@ "bundled": true, "dev": true, "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" }, "dependencies": { "source-map": { @@ -9144,26 +11581,18 @@ "bundled": true, "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } }, - "has-ansi": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, "has-flag": { - "version": "1.0.0", + "version": "3.0.0", "bundled": true, "dev": true }, "hosted-git-info": { - "version": "2.5.0", + "version": "2.7.1", "bundled": true, "dev": true }, @@ -9177,8 +11606,8 @@ "bundled": true, "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -9186,14 +11615,6 @@ "bundled": true, "dev": true }, - "invariant": { - "version": "2.2.2", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "1.3.1" - } - }, "invert-kv": { "version": "1.0.0", "bundled": true, @@ -9205,7 +11626,7 @@ "dev": true }, "is-buffer": { - "version": "1.1.5", + "version": "1.1.6", "bundled": true, "dev": true }, @@ -9214,70 +11635,10 @@ "bundled": true, "dev": true, "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-dotfile": { - "version": "1.0.3", - "bundled": true, - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" + "builtin-modules": "^1.0.0" } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-glob": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-number": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "is-primitive": { "version": "2.0.0", "bundled": true, "dev": true @@ -9287,114 +11648,63 @@ "bundled": true, "dev": true }, - "is-utf8": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, "isexe": { "version": "2.0.0", "bundled": true, "dev": true }, - "isobject": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, "istanbul-lib-coverage": { - "version": "1.1.1", + "version": "2.0.1", "bundled": true, "dev": true }, "istanbul-lib-hook": { - "version": "1.1.0", + "version": "2.0.1", "bundled": true, "dev": true, "requires": { - "append-transform": "0.4.0" - } - }, - "istanbul-lib-instrument": { - "version": "1.9.1", - "bundled": true, - "dev": true, - "requires": { - "babel-generator": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.1.1", - "semver": "5.4.1" + "append-transform": "^1.0.0" } }, "istanbul-lib-report": { - "version": "1.1.2", + "version": "2.0.2", "bundled": true, "dev": true, "requires": { - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "path-parse": "1.0.5", - "supports-color": "3.2.3" - }, - "dependencies": { - "supports-color": { - "version": "3.2.3", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "istanbul-lib-coverage": "^2.0.1", + "make-dir": "^1.3.0", + "supports-color": "^5.4.0" } }, "istanbul-lib-source-maps": { - "version": "1.2.2", + "version": "2.0.1", "bundled": true, "dev": true, "requires": { - "debug": "3.1.0", - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "source-map": "0.5.7" + "debug": "^3.1.0", + "istanbul-lib-coverage": "^2.0.1", + "make-dir": "^1.3.0", + "rimraf": "^2.6.2", + "source-map": "^0.6.1" }, "dependencies": { - "debug": { - "version": "3.1.0", + "source-map": { + "version": "0.6.1", "bundled": true, - "dev": true, - "requires": { - "ms": "2.0.0" - } + "dev": true } } }, "istanbul-reports": { - "version": "1.1.3", + "version": "2.0.1", "bundled": true, "dev": true, "requires": { - "handlebars": "4.0.11" + "handlebars": "^4.0.11" } }, - "js-tokens": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "jsesc": { - "version": "1.3.0", + "json-parse-better-errors": { + "version": "1.0.2", "bundled": true, "dev": true }, @@ -9403,7 +11713,7 @@ "bundled": true, "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } }, "lazy-cache": { @@ -9417,39 +11727,31 @@ "bundled": true, "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "load-json-file": { - "version": "1.1.0", + "version": "4.0.0", "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, "locate-path": { - "version": "2.0.0", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "bundled": true, - "dev": true - } + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "lodash": { - "version": "4.17.4", + "lodash.flattendeep": { + "version": "4.4.0", "bundled": true, "dev": true }, @@ -9458,29 +11760,29 @@ "bundled": true, "dev": true }, - "loose-envify": { - "version": "1.3.1", - "bundled": true, - "dev": true, - "requires": { - "js-tokens": "3.0.2" - } - }, "lru-cache": { - "version": "4.1.1", + "version": "4.1.3", "bundled": true, "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "md5-hex": { + "make-dir": { "version": "1.3.0", "bundled": true, "dev": true, "requires": { - "md5-o-matic": "0.1.1" + "pify": "^3.0.0" + } + }, + "md5-hex": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "md5-o-matic": "^0.1.1" } }, "md5-o-matic": { @@ -9493,39 +11795,26 @@ "bundled": true, "dev": true, "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "^1.0.0" } }, "merge-source-map": { - "version": "1.0.4", + "version": "1.1.0", "bundled": true, "dev": true, "requires": { - "source-map": "0.5.7" - } - }, - "micromatch": { - "version": "2.3.11", - "bundled": true, - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "bundled": true, + "dev": true + } } }, "mimic-fn": { - "version": "1.1.0", + "version": "1.2.0", "bundled": true, "dev": true }, @@ -9534,11 +11823,11 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "0.0.8", + "version": "0.0.10", "bundled": true, "dev": true }, @@ -9548,6 +11837,13 @@ "dev": true, "requires": { "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + } } }, "ms": { @@ -9560,18 +11856,10 @@ "bundled": true, "dev": true, "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "npm-run-path": { @@ -9579,7 +11867,7 @@ "bundled": true, "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "number-is-nan": { @@ -9587,26 +11875,12 @@ "bundled": true, "dev": true }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "object.omit": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } - }, "once": { "version": "1.4.0", "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "optimist": { @@ -9614,8 +11888,8 @@ "bundled": true, "dev": true, "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } }, "os-homedir": { @@ -9628,9 +11902,9 @@ "bundled": true, "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "p-finally": { @@ -9639,44 +11913,50 @@ "dev": true }, "p-limit": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "p-locate": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { - "p-limit": "1.1.0" + "p-try": "^2.0.0" } }, - "parse-glob": { - "version": "3.0.4", + "p-locate": { + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "package-hash": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "lodash.flattendeep": "^4.4.0", + "md5-hex": "^2.0.0", + "release-zalgo": "^1.0.0" } }, "parse-json": { - "version": "2.2.0", + "version": "4.0.0", "bundled": true, "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "path-exists": { - "version": "2.1.0", + "version": "3.0.0", "bundled": true, - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -9688,171 +11968,64 @@ "bundled": true, "dev": true }, - "path-parse": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, "path-type": { - "version": "1.1.0", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "pify": "^3.0.0" } }, "pify": { - "version": "2.3.0", + "version": "3.0.0", "bundled": true, "dev": true }, - "pinkie": { - "version": "2.0.4", - "bundled": true, - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, "pkg-dir": { - "version": "1.0.0", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "find-up": "1.1.2" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - } + "find-up": "^3.0.0" } }, - "preserve": { - "version": "0.2.0", - "bundled": true, - "dev": true - }, "pseudomap": { "version": "1.0.2", "bundled": true, "dev": true }, - "randomatic": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, "read-pkg": { - "version": "1.1.0", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, "read-pkg-up": { - "version": "1.0.1", + "version": "4.0.0", "bundled": true, "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - } + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" } }, - "regenerator-runtime": { - "version": "0.11.0", - "bundled": true, - "dev": true - }, - "regex-cache": { - "version": "0.4.4", + "release-zalgo": { + "version": "1.0.0", "bundled": true, "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "es6-error": "^4.0.1" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "bundled": true, - "dev": true - }, "repeat-string": { "version": "1.6.1", "bundled": true, "dev": true }, - "repeating": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, "require-directory": { "version": "2.1.1", "bundled": true, @@ -9864,7 +12037,7 @@ "dev": true }, "resolve-from": { - "version": "2.0.0", + "version": "4.0.0", "bundled": true, "dev": true }, @@ -9874,7 +12047,7 @@ "dev": true, "optional": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { @@ -9882,11 +12055,16 @@ "bundled": true, "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, "semver": { - "version": "5.4.1", + "version": "5.5.0", "bundled": true, "dev": true }, @@ -9900,7 +12078,7 @@ "bundled": true, "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -9913,44 +12091,50 @@ "bundled": true, "dev": true }, - "slide": { - "version": "1.1.6", - "bundled": true, - "dev": true - }, "source-map": { "version": "0.5.7", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "spawn-wrap": { - "version": "1.3.8", + "version": "1.4.2", "bundled": true, "dev": true, "requires": { - "foreground-child": "1.5.6", - "mkdirp": "0.5.1", - "os-homedir": "1.0.2", - "rimraf": "2.6.2", - "signal-exit": "3.0.2", - "which": "1.3.0" + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" } }, "spdx-correct": { - "version": "1.0.2", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "spdx-expression-parse": { - "version": "1.0.4", + "spdx-exceptions": { + "version": "2.1.0", "bundled": true, "dev": true }, + "spdx-expression-parse": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "spdx-license-ids": { - "version": "1.2.2", + "version": "3.0.0", "bundled": true, "dev": true }, @@ -9959,45 +12143,22 @@ "bundled": true, "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { - "version": "3.0.1", + "version": "4.0.0", "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^3.0.0" } }, "strip-bom": { - "version": "2.0.0", + "version": "3.0.0", "bundled": true, - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } + "dev": true }, "strip-eof": { "version": "1.0.0", @@ -10005,31 +12166,23 @@ "dev": true }, "supports-color": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "test-exclude": { - "version": "4.1.1", + "version": "5.4.0", "bundled": true, "dev": true, "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "require-main-filename": "1.0.1" + "has-flag": "^3.0.0" } }, - "to-fast-properties": { - "version": "1.0.3", + "test-exclude": { + "version": "5.0.0", "bundled": true, - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "bundled": true, - "dev": true + "dev": true, + "requires": { + "arrify": "^1.0.1", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^1.0.1" + } }, "uglify-js": { "version": "2.8.29", @@ -10037,9 +12190,9 @@ "dev": true, "optional": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "yargs": { @@ -10048,9 +12201,9 @@ "dev": true, "optional": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } @@ -10062,21 +12215,26 @@ "dev": true, "optional": true }, + "uuid": { + "version": "3.3.2", + "bundled": true, + "dev": true + }, "validate-npm-package-license": { - "version": "3.0.1", + "version": "3.0.3", "bundled": true, "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "which": { - "version": "1.3.0", + "version": "1.3.1", "bundled": true, "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -10100,18 +12258,39 @@ "bundled": true, "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, "string-width": { "version": "1.0.2", "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" } } } @@ -10122,13 +12301,13 @@ "dev": true }, "write-file-atomic": { - "version": "1.3.4", + "version": "2.3.0", "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "slide": "1.1.6" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, "y18n": { @@ -10142,54 +12321,80 @@ "dev": true }, "yargs": { - "version": "10.0.3", + "version": "11.1.0", "bundled": true, "dev": true, "requires": { - "cliui": "3.2.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "8.0.0" + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" }, "dependencies": { "cliui": { - "version": "3.2.0", + "version": "4.1.0", "bundled": true, "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } + }, + "find-up": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "bundled": true, + "dev": true } } }, "yargs-parser": { - "version": "8.0.0", + "version": "9.0.2", "bundled": true, "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { @@ -10202,9 +12407,9 @@ } }, "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, "object-assign": { @@ -10225,9 +12430,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -10236,34 +12441,24 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "is-buffer": "^1.1.5" } } } }, "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", "dev": true }, "object-visit": { @@ -10272,26 +12467,29 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + "isobject": "^3.0.0" } }, "object.assign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz", - "integrity": "sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { - "define-properties": "1.1.2", - "function-bind": "1.1.1", - "object-keys": "1.0.11" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" } }, "object.omit": { @@ -10300,8 +12498,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "object.pick": { @@ -10310,15 +12508,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + "isobject": "^3.0.1" } }, "on-finished": { @@ -10335,7 +12525,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -10344,17 +12534,23 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "^1.0.0" } }, + "opener": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", + "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", + "dev": true + }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } }, "optionator": { @@ -10363,12 +12559,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "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" }, "dependencies": { "wordwrap": { @@ -10379,83 +12575,13 @@ } } }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "dev": true - }, - "ora": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", - "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-spinners": "0.1.2", - "object-assign": "4.1.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "1.0.1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "ordered-read-streams": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.1" } }, "os-browserify": { @@ -10466,7 +12592,7 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, @@ -10476,9 +12602,9 @@ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" }, "dependencies": { "execa": { @@ -10487,48 +12613,95 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } } } }, "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "output-file-sync": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz", + "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "is-plain-obj": "^1.1.0", + "mkdirp": "^0.5.1" + } + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "http://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, - "p-limit": { + "p-is-promise": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", + "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", "dev": true }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, "p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.1.0" + "p-limit": "^1.1.0" } }, "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz", + "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==", + "dev": true + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, "package-json": { @@ -10537,10 +12710,40 @@ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "dev": true, "requires": { - "got": "6.7.1", - "registry-auth-token": "3.3.1", - "registry-url": "3.1.0", - "semver": "5.4.1" + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + }, + "dependencies": { + "got": { + "version": "6.7.1", + "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + } } }, "pako": { @@ -10549,51 +12752,144 @@ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", "dev": true }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, "parents": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", "dev": true, "requires": { - "path-platform": "0.11.15" + "path-platform": "~0.11.15" } }, "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "version": "5.1.1", + "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { - "asn1.js": "4.9.2", - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" + } + }, + "parse-domain": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/parse-domain/-/parse-domain-2.1.6.tgz", + "integrity": "sha512-OyFDkKhVqGLY/Bn5cUb00Y54SPA6z8adrIQDhKEfpMMyTV7JanQ8dGsClMEIgP5Jq/sOX2rMdFaLDZ4xbAT+pA==", + "dev": true, + "requires": { + "chai": "^4.1.2", + "got": "^8.0.1", + "mkdirp": "^0.5.1", + "mocha": "^4.0.1" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "diff": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "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" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "mocha": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", + "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.3.1", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + } + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } + } } }, "parse-entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.1.tgz", - "integrity": "sha1-gRLYhHExnyerrk1klksSL+ThuJA=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.0.tgz", + "integrity": "sha512-XXtDdOPLSB0sHecbEapQi6/58U/ODj/KWfIXmmMCJF/eRn8laX6LZbOyioMoETOOJoWRW8/qTSl5VQkUIfKM5g==", "dev": true, "requires": { - "character-entities": "1.2.1", - "character-entities-legacy": "1.1.1", - "character-reference-invalid": "1.1.1", - "is-alphanumerical": "1.0.1", - "is-decimal": "1.0.1", - "is-hexadecimal": "1.0.1" + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" } }, "parse-filepath": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", - "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", "dev": true, "requires": { - "is-absolute": "0.2.6", - "map-cache": "0.2.2", - "path-root": "0.1.1" + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" } }, "parse-git-config": { @@ -10602,7 +12898,7 @@ "integrity": "sha1-Jygz/dFf6hRvt10zbSNrljtv9wY=", "dev": true, "requires": { - "ini": "1.3.5" + "ini": "^1.3.3" } }, "parse-github-repo-url": { @@ -10617,10 +12913,27 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } } }, "parse-json": { @@ -10629,8 +12942,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.1" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "parse-passwd": { @@ -10639,23 +12952,26 @@ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", "dev": true }, - "parse-url": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-1.3.11.tgz", - "integrity": "sha1-V8FUKKuKiSsfQ4aWRccR0OFEtVQ=", + "parse-path": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-3.0.4.tgz", + "integrity": "sha512-wP70vtwv2DyrM2YoA7ZHVv4zIXa4P7dGgHlj+VwyXNDduLLVJ7NMY1zsFxjUUJ3DAwJLupGb1H5gMDDiNlJaxw==", "dev": true, "requires": { - "is-ssh": "1.3.0", - "protocols": "1.4.6" + "is-ssh": "^1.3.0", + "protocols": "^1.4.0" } }, - "parsejson": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "parse-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-3.0.2.tgz", + "integrity": "sha1-YCeHpwY6eV1yuGcxl1BecvYGEL4=", "dev": true, "requires": { - "better-assert": "1.0.2" + "is-ssh": "^1.3.0", + "normalize-url": "^1.9.1", + "parse-path": "^3.0.1", + "protocols": "^1.4.0" } }, "parseqs": { @@ -10664,7 +12980,7 @@ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "dev": true, "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseuri": { @@ -10673,7 +12989,7 @@ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "dev": true, "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseurl": { @@ -10708,7 +13024,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, @@ -10725,9 +13041,9 @@ "dev": true }, "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, "path-platform": { @@ -10742,7 +13058,7 @@ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", "dev": true, "requires": { - "path-root-regex": "0.1.2" + "path-root-regex": "^0.1.0" } }, "path-root-regex": { @@ -10751,13 +13067,27 @@ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", "dev": true }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "pathval": { @@ -10766,28 +13096,28 @@ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" }, "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pinkie": { @@ -10802,37 +13132,25 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.0.tgz", + "integrity": "sha512-8t5BsXy1LUIjn3WWOlOuFDuKswhQb/tkak641lvBgmPOBUQHXveORtlMCp6OdPV1dtuTaEahKA8VNz6uLfKBtA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" } }, "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "1.1.2" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - } + "find-up": "^2.1.0" } }, "pluralize": { @@ -10867,7 +13185,7 @@ }, "pretty-hrtime": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "resolved": "http://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", "dev": true }, @@ -10884,15 +13202,15 @@ "dev": true }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", + "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", "dev": true }, "promise": { @@ -10901,18 +13219,33 @@ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "dev": true, "requires": { - "asap": "2.0.6" + "asap": "~2.0.3" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "prompt-promise": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/prompt-promise/-/prompt-promise-1.0.3.tgz", + "integrity": "sha1-eM5Py5oUoQjEkXTy2AjEQNG94mU=", + "dev": true, + "requires": { + "keypress": "~0.2.1", + "native-or-another": "~2.0.0" } }, "prop-types": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", - "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", + "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", "dev": true, "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" } }, "property-information": { @@ -10927,6 +13260,16 @@ "integrity": "sha1-+LsmPqG1/Xp2BNJri+Ob13Z4v4o=", "dev": true }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.8.0" + } + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -10939,23 +13282,30 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, + "psl": { + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", + "dev": true + }, "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.5" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "pull-defer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/pull-defer/-/pull-defer-0.2.2.tgz", - "integrity": "sha1-CIew/7MK8ypW2+z6csFnInHwexM=" + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/pull-defer/-/pull-defer-0.2.3.tgz", + "integrity": "sha512-/An3KE7mVjZCqNhZsr22k1Tx8MACnUnHZZNPSJ0S62td8JtYr/AiRG42Vz7Syu31SoTLUzVIe61jtT/pNdjVYA==" }, "pull-generate": { "version": "2.2.0", @@ -10968,35 +13318,35 @@ "integrity": "sha1-fuQnJj/fTaglOXrAoF4atLdL120=" }, "pull-stream": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.1.tgz", - "integrity": "sha1-xcKuSlEkbv7rzGXAQSo9clqSzgA=" + "version": "3.6.9", + "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.9.tgz", + "integrity": "sha512-hJn4POeBrkttshdNl0AoSCVjMVSuBwuHocMerUdoZ2+oIUzrWHFTwJMlbHND7OiKLVgvz6TFj8ZUVywUMXccbw==" }, "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.0", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz", - "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "3.5.1", - "inherits": "2.0.3", - "pump": "1.0.3" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "q": { @@ -11006,17 +13356,27 @@ "dev": true }, "qjobs": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", - "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -11029,16 +13389,22 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "dev": true + }, "radium": { "version": "0.19.6", "resolved": "https://registry.npmjs.org/radium/-/radium-0.19.6.tgz", "integrity": "sha512-IABYntqCwYelUUIwA52maSCgJbqtJjHKIoD21wgpw3dGhIUbJ5chDShDGdaFiEzdF03hN9jfQqlmn0bF4YhfrQ==", "dev": true, "requires": { - "array-find": "1.0.0", - "exenv": "1.2.2", - "inline-style-prefixer": "2.0.5", - "prop-types": "15.6.0" + "array-find": "^1.0.0", + "exenv": "^1.2.1", + "inline-style-prefixer": "^2.0.5", + "prop-types": "^15.5.8" } }, "radium-bootstrap-grid": { @@ -11048,63 +13414,41 @@ "dev": true }, "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" }, "dependencies": { "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "kind-of": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true } } }, "randombytes": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", - "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.1.0" } }, "randomfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", - "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.0.5", - "safe-buffer": "5.1.1" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -11119,8 +13463,8 @@ "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", "dev": true, "requires": { - "bytes": "1.0.0", - "string_decoder": "0.10.31" + "bytes": "1", + "string_decoder": "0.10" }, "dependencies": { "string_decoder": { @@ -11132,20 +13476,20 @@ } }, "rc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz", - "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -11157,11 +13501,11 @@ "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=", "dev": true, "requires": { - "create-react-class": "15.6.2", - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.0" + "create-react-class": "^15.6.0", + "fbjs": "^0.8.9", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.0", + "prop-types": "^15.5.10" } }, "react-dom": { @@ -11170,10 +13514,10 @@ "integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=", "dev": true, "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.0" + "fbjs": "^0.8.9", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.0", + "prop-types": "^15.5.10" } }, "react-icon-base": { @@ -11203,46 +13547,90 @@ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "4.0.0", - "normalize-package-data": "2.4.0", - "path-type": "3.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "3.0.0" + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + } } }, "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "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.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, "rechoir": { @@ -11251,40 +13639,47 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.5.0" + "resolve": "^1.1.6" } }, "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", "dev": true, "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" } }, "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", "dev": true }, + "regenerate-unicode-properties": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", + "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", "dev": true }, "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz", + "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" + "private": "^0.1.6" } }, "regex-cache": { @@ -11293,37 +13688,47 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regex-not": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.0.tgz", - "integrity": "sha1-Qvg+OXcWIt+CawKvF2Ul1qXxV/k=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "2.0.1" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, + "regexpp": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.2.0.tgz", + "integrity": "sha512-Z835VSnJJ46CNBttalHD/dB+Sj2ezmY6Xp38npwU87peK6mqOzOpV8eYktdkLTEkzzD+JsTcxd84ozd8I14+rw==", "dev": true, "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^7.0.0", + "regjsgen": "^0.4.0", + "regjsparser": "^0.3.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.0.2" } }, "registry-auth-token": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", - "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", "dev": true, "requires": { - "rc": "1.2.2", - "safe-buffer": "5.1.1" + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, "registry-url": { @@ -11332,41 +13737,41 @@ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "dev": true, "requires": { - "rc": "1.2.2" + "rc": "^1.0.1" } }, "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.4.0.tgz", + "integrity": "sha512-X51Lte1gCYUdlwhF28+2YMO0U6WeN0GLpgpA7LK7mbdDnkQYiwvEpmpe0F/cv5L14EbxgrdayAG3JETBv0dbXA==", "dev": true }, "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.3.0.tgz", + "integrity": "sha512-zza72oZBBHzt64G7DxdqrOo/30bhHkwMUoT0WqfGu98XLd7N+1tsy5MJ96Bk4MD0y74n629RhmrGW6XlnLLwCA==", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } } }, "remark": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-8.0.0.tgz", - "integrity": "sha512-K0PTsaZvJlXTl9DN6qYlvjTkqSZBFELhROZMrblm2rB+085flN84nz4g/BscKRMqDvhzlK1oQ/xnWQumdeNZYw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-9.0.0.tgz", + "integrity": "sha512-amw8rGdD5lHbMEakiEsllmkdBP+/KpjW/PRK6NSGPZKCQowh0BT4IWXDAkRMyG3SB9dKPXWMviFjNusXzXNn3A==", "dev": true, "requires": { - "remark-parse": "4.0.0", - "remark-stringify": "4.0.0", - "unified": "6.1.6" + "remark-parse": "^5.0.0", + "remark-stringify": "^5.0.0", + "unified": "^6.0.0" } }, "remark-html": { @@ -11375,76 +13780,85 @@ "integrity": "sha512-jqRzkZXCkM12gIY2ibMLTW41m7rfanliMTVQCFTezHJFsbH00YaTox/BX4gU+f/zCdzfhFJONtebFByvpMv37w==", "dev": true, "requires": { - "hast-util-sanitize": "1.1.2", - "hast-util-to-html": "3.1.0", - "mdast-util-to-hast": "3.0.0", - "xtend": "4.0.1" + "hast-util-sanitize": "^1.0.0", + "hast-util-to-html": "^3.0.0", + "mdast-util-to-hast": "^3.0.0", + "xtend": "^4.0.1" } }, "remark-parse": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-4.0.0.tgz", - "integrity": "sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz", + "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==", "dev": true, "requires": { - "collapse-white-space": "1.0.3", - "is-alphabetical": "1.0.1", - "is-decimal": "1.0.1", - "is-whitespace-character": "1.0.1", - "is-word-character": "1.0.1", - "markdown-escapes": "1.0.1", - "parse-entities": "1.1.1", - "repeat-string": "1.6.1", - "state-toggle": "1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", "trim": "0.0.1", - "trim-trailing-lines": "1.1.0", - "unherit": "1.1.0", - "unist-util-remove-position": "1.1.1", - "vfile-location": "2.0.2", - "xtend": "4.0.1" + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "remark-reference-links": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/remark-reference-links/-/remark-reference-links-4.0.2.tgz", + "integrity": "sha512-871gKTysBtdQUjoqXA0URWmVhI2jFrpLkWrM3/bydAbsngilDYRjjl2LDAgmNooW8bYbHa57YQ13ld+mYr3TLg==", + "dev": true, + "requires": { + "unist-util-visit": "^1.0.0" } }, "remark-slug": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-4.2.3.tgz", - "integrity": "sha1-jZh9Dl5j1KSeo3uQ/pmaPc/IG3I=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-5.1.0.tgz", + "integrity": "sha512-FW/V7b3ekfDL1eyPDyzfq0qz5HFPKPNWVC2eqFDie45r774FLGoymOS1oU7LVQfdFNEvNLZ6oBJT/oIxAyBISg==", "dev": true, "requires": { - "github-slugger": "1.2.0", - "mdast-util-to-string": "1.0.4", - "unist-util-visit": "1.3.0" + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^1.0.0" } }, "remark-stringify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-4.0.0.tgz", - "integrity": "sha512-xLuyKTnuQer3ke9hkU38SUYLiTmS078QOnoFavztmbt/pAJtNSkNtFgR0U//uCcmG0qnyxao+PDuatQav46F1w==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-5.0.0.tgz", + "integrity": "sha512-Ws5MdA69ftqQ/yhRF9XhVV29mhxbfGhbz0Rx5bQH+oJcNhhSM6nCu1EpLod+DjrFGrU0BMPs+czVmJZU7xiS7w==", "dev": true, "requires": { - "ccount": "1.0.2", - "is-alphanumeric": "1.0.0", - "is-decimal": "1.0.1", - "is-whitespace-character": "1.0.1", - "longest-streak": "2.0.2", - "markdown-escapes": "1.0.1", - "markdown-table": "1.1.1", - "mdast-util-compact": "1.0.1", - "parse-entities": "1.1.1", - "repeat-string": "1.6.1", - "state-toggle": "1.0.0", - "stringify-entities": "1.3.1", - "unherit": "1.1.0", - "xtend": "4.0.1" + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^1.1.0", + "mdast-util-compact": "^1.0.0", + "parse-entities": "^1.0.2", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^1.0.1", + "unherit": "^1.0.4", + "xtend": "^4.0.1" } }, "remark-toc": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-toc/-/remark-toc-4.0.1.tgz", - "integrity": "sha1-/zb/beVOoH3Vnj9TNKSjqsHpMYU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/remark-toc/-/remark-toc-5.1.0.tgz", + "integrity": "sha512-G2qPor2XVn6SgtdoKyD3FhhFuzIOOHK9RYVv2PFwk5PxIsNtxeiIuIy3yjGZvgFzrTXBtqpR+sVf9BC9TWSaHg==", "dev": true, "requires": { - "mdast-util-toc": "2.0.1", - "remark-slug": "4.2.3" + "mdast-util-toc": "^3.0.0", + "remark-slug": "^5.0.0" } }, "remote-origin-url": { @@ -11453,7 +13867,7 @@ "integrity": "sha1-TT4pAvNOLTfRwmPYdxC3frQIajA=", "dev": true, "requires": { - "parse-git-config": "0.2.0" + "parse-git-config": "^0.2.0" } }, "remove-bom-buffer": { @@ -11462,8 +13876,8 @@ "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", "dev": true, "requires": { - "is-buffer": "1.1.6", - "is-utf8": "0.2.1" + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" } }, "remove-bom-stream": { @@ -11472,9 +13886,9 @@ "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", "dev": true, "requires": { - "remove-bom-buffer": "3.0.0", - "safe-buffer": "5.1.1", - "through2": "2.0.3" + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" } }, "remove-trailing-separator": { @@ -11484,9 +13898,9 @@ "dev": true }, "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true }, "repeat-string": { @@ -11501,7 +13915,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "replace-ext": { @@ -11511,41 +13925,31 @@ "dev": true }, "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "dev": true, "requires": { - "aws-sign2": "0.6.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.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "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": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" - }, - "dependencies": { - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true - } + "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.0", + "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.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" } }, "require-directory": { @@ -11554,6 +13958,12 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", @@ -11562,12 +13972,20 @@ }, "require-uncached": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + } } }, "requires-port": { @@ -11577,12 +13995,38 @@ "dev": true }, "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" + } + }, + "resolve-bin": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/resolve-bin/-/resolve-bin-0.4.0.tgz", + "integrity": "sha1-RxMiSYkRAa+xmZH+k3ywpfBy5dk=", + "dev": true, + "requires": { + "find-parent-dir": "~0.3.0" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } } }, "resolve-dir": { @@ -11591,23 +14035,32 @@ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "global-modules": "1.0.0" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" } }, "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "resolve-global": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-0.1.0.tgz", + "integrity": "sha1-j7As/Vt9sgEY6IYxHxWvlb0V+9k=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0" + } + }, "resolve-options": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", "dev": true, "requires": { - "value-or-function": "3.0.0" + "value-or-function": "^3.0.0" } }, "resolve-url": { @@ -11616,24 +14069,36 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "0.1.4" - } + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rfdc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz", + "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==", + "dev": true }, "rimraf": { "version": "2.6.2", @@ -11641,17 +14106,17 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-async": { @@ -11660,7 +14125,16 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" } }, "rx-lite": { @@ -11675,30 +14149,22 @@ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, "requires": { - "rx-lite": "4.0.8" + "rx-lite": "*" } }, "rxjs": { - "version": "5.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.5.tgz", - "integrity": "sha512-D/MfQnPMBk8P8gfwGxvCkuaWBcG58W7dUMT//URPoYzIbDEKT0GezdirkK5whMgKFBATfCoTpxO8bJQGJ04W5A==", + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", "dev": true, "requires": { - "symbol-observable": "1.0.1" - }, - "dependencies": { - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true - } + "tslib": "^1.9.0" } }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-json-parse": { "version": "1.0.1", @@ -11706,10 +14172,43 @@ "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", "dev": true }, + "safe-regex": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + }, + "dependencies": { + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + } + } + }, "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true }, "semver-diff": { @@ -11718,7 +14217,7 @@ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "dev": true, "requires": { - "semver": "5.4.1" + "semver": "^5.0.3" } }, "semver-regex": { @@ -11727,37 +14226,86 @@ "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", "dev": true }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", + "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", + "dev": true + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "set-getter": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", - "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", - "dev": true, - "requires": { - "to-object-path": "0.3.0" - } - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "setimmediate": { @@ -11767,19 +14315,19 @@ "dev": true }, "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, "sha.js": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", - "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", + "version": "2.4.11", + "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shebang-command": { @@ -11788,7 +14336,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -11798,21 +14346,24 @@ "dev": true }, "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz", + "integrity": "sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ==", "dev": true, "requires": { - "glob": "7.1.2", - "interpret": "1.1.0", - "rechoir": "0.6.2" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" } }, "shortid": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.8.tgz", - "integrity": "sha1-AzsRfWoul1gE9vCWnb59PQs1UTE=", - "dev": true + "version": "2.2.14", + "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.14.tgz", + "integrity": "sha512-4UnZgr9gDdA1kaKj/38IiudfC3KHKhDc1zi/HSxd9FQDR0VLwH3/y79tZJLsVYPsJgIjeHjqIWaWVRJUj9qZOQ==", + "dev": true, + "requires": { + "nanoid": "^2.0.0" + } }, "signal-exit": { "version": "3.0.2", @@ -11821,12 +14372,173 @@ "dev": true }, "simple-git": { - "version": "1.85.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.85.0.tgz", - "integrity": "sha1-VjrSke/IoSdzXo+815aWc3dhTNQ=", + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.107.0.tgz", + "integrity": "sha512-t4OK1JRlp4ayKRfcW6owrWcRVLyHRUlhGd0uN6ZZTqfDq8a5XpcUdOKiGRNobHEuMtNqzp0vcJNvhYWwh5PsQA==", "dev": true, "requires": { - "debug": "3.1.0" + "debug": "^4.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", + "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "dev": true, + "requires": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" }, "dependencies": { "debug": { @@ -11840,256 +14552,86 @@ } } }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", "dev": true }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - } - } - }, - "snapdragon": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", - "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", - "dev": true, - "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.1", - "use": "2.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "socket.io": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", - "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", - "dev": true, - "requires": { - "debug": "2.3.3", - "engine.io": "1.8.3", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "dev": true - } - } - }, - "socket.io-adapter": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", - "dev": true, - "requires": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, "socket.io-client": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", - "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", "dev": true, "requires": { "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "1.8.3", - "has-binary": "0.1.7", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", + "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", + "socket.io-parser": "~3.2.0", "to-array": "0.1.4" }, "dependencies": { "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true } } }, "socket.io-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "version": "3.2.0", + "resolved": "http://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "dev": true, "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" }, "dependencies": { - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", - "dev": true - }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.1" + "ms": "2.0.0" } }, "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "dev": true } } }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, "source-list-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", "dev": true }, "source-map": { @@ -12099,25 +14641,34 @@ "dev": true }, "source-map-resolve": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", - "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "2.0.3", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", + "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", "dev": true, "requires": { - "source-map": "0.5.7" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "source-map-url": { @@ -12127,33 +14678,44 @@ "dev": true }, "space-separated-tokens": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.1.tgz", - "integrity": "sha1-lpW5355lrsGBHUw/nOUlILwvfk0=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.2.tgz", + "integrity": "sha512-G3jprCEw+xFEs0ORweLmblJ3XLymGGr6hxZYTYZjIlvDti9vOBUjRQa1Rzjt012aRrocKstHwdNi+F7HguPsEA==", "dev": true, "requires": { "trim": "0.0.1" } }, "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", + "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", "dev": true }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", + "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==", "dev": true }, "split": { @@ -12162,7 +14724,7 @@ "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "requires": { - "through": "2.3.8" + "through": "2" } }, "split-string": { @@ -12171,27 +14733,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.1.tgz", - "integrity": "sha512-Fg1xXAv+qXKdwHiJFMcZSqsMcbPlkzsZtf8KkLJ2fqnP+lqg2RjEKgDcSfO9CO1+p4LZKgApDBUUUqKaaRhwZQ==", - "dev": true, - "requires": { - "is-extendable": "1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - } + "extend-shallow": "^3.0.0" } }, "split2": { @@ -12200,7 +14742,7 @@ "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", "dev": true, "requires": { - "through2": "2.0.3" + "through2": "^2.0.2" } }, "sprintf-js": { @@ -12209,40 +14751,43 @@ "integrity": "sha1-z/yvcC2vZeo5u04PorKZzsGhvkY=" }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", + "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==", "dev": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true + "dev": true } } }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + }, "state-toggle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.0.tgz", - "integrity": "sha1-0g+aYWu08MO5i5GSLSW2QKorxCU=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz", + "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==", "dev": true }, "static-extend": { @@ -12251,8 +14796,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -12261,32 +14806,24 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, + "stats-webpack-plugin": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/stats-webpack-plugin/-/stats-webpack-plugin-0.7.0.tgz", + "integrity": "sha512-NT0YGhwuQ0EOX+uPhhUcI6/+1Sq/pMzNuSCBVT4GbFl/ac6I/JZefBcjlECNfAb1t3GOx5dEj1Z7x0cAxeeVLQ==", + "dev": true, + "requires": { + "lodash": "^4.17.4" + } + }, "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, "stream-array": { @@ -12295,22 +14832,28 @@ "integrity": "sha1-nl9zRfITfDDuO0mLkRToC1K7frU=", "dev": true, "requires": { - "readable-stream": "2.1.5" + "readable-stream": "~2.1.0" }, "dependencies": { + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, "readable-stream": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", "dev": true, "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" + "buffer-shims": "^1.0.0", + "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" } }, "string_decoder": { @@ -12327,8 +14870,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-combiner2": { @@ -12337,21 +14880,43 @@ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, "requires": { - "duplexer2": "0.1.4", - "readable-stream": "2.3.3" + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.0.0.tgz", + "integrity": "sha512-JELJfd+btL9GHtxU3+XXhg9NLYrKFnhybfvRuDghtyVkOFydz3PKNT1df07AMr88qW03WHF+FSV0PySpXignCA==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^3.0.6", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.0.6.tgz", + "integrity": "sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "stream-shift": { @@ -12360,24 +14925,50 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, - "stream-to-observable": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz", - "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", - "dev": true, - "requires": { - "any-observable": "0.2.0" - } - }, "stream-to-pull-stream": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/stream-to-pull-stream/-/stream-to-pull-stream-1.7.2.tgz", "integrity": "sha1-dXYJrhzr0zx0MtSvvjH/eGULnd4=", "requires": { - "looper": "3.0.0", - "pull-stream": "3.6.1" + "looper": "^3.0.0", + "pull-stream": "^3.2.3" } }, + "streamroller": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", + "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", + "dev": true, + "requires": { + "date-format": "^1.2.0", + "debug": "^3.1.0", + "mkdirp": "^0.5.1", + "readable-stream": "^2.3.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, "string-template": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", @@ -12390,45 +14981,39 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "stringify-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.1.tgz", - "integrity": "sha1-sVDsLXKsTBtfMktR+2soyc3/BYw=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", + "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", "dev": true, "requires": { - "character-entities-html4": "1.1.1", - "character-entities-legacy": "1.1.1", - "is-alphanumerical": "1.0.1", - "is-hexadecimal": "1.0.1" + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-hexadecimal": "^1.0.0" } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -12443,8 +15028,8 @@ "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", "dev": true, "requires": { - "first-chunk-stream": "1.0.0", - "strip-bom": "2.0.0" + "first-chunk-stream": "^1.0.0", + "strip-bom": "^2.0.0" }, "dependencies": { "strip-bom": { @@ -12453,25 +15038,22 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } }, "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "4.0.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true }, "strip-json-comments": { "version": "2.0.1", @@ -12479,36 +15061,51 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "strip-url-auth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-url-auth/-/strip-url-auth-1.0.1.tgz", + "integrity": "sha1-IrD6OkE4WzO+PzMVUbu4N/oM164=", + "dev": true + }, "subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", "dev": true, "requires": { - "minimist": "1.2.0" + "minimist": "^1.1.0" }, "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^3.0.0" } }, "symbol-observable": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", - "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", "dev": true }, "table": { @@ -12517,24 +15114,24 @@ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "dev": true, "requires": { - "ajv": "5.5.1", - "ajv-keywords": "2.1.1", - "chalk": "2.3.0", - "lodash": "4.17.4", + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", "slice-ansi": "1.0.0", - "string-width": "2.1.1" + "string-width": "^2.1.1" }, "dependencies": { "ajv": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.1.tgz", - "integrity": "sha1-s4u4h22ehr7plJVqBOch6IskjrI=", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "ansi-regex": { @@ -12543,20 +15140,32 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -12565,15 +15174,15 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } }, "tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.0.tgz", + "integrity": "sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA==", "dev": true }, "term-size": { @@ -12582,7 +15191,7 @@ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", "dev": true, "requires": { - "execa": "0.7.0" + "execa": "^0.7.0" }, "dependencies": { "execa": { @@ -12591,21 +15200,21 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } } } }, "text-extensions": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz", - "integrity": "sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true }, "text-table": { @@ -12616,18 +15225,18 @@ }, "through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, "through2-filter": { @@ -12636,16 +15245,10 @@ "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", "dev": true, "requires": { - "through2": "2.0.3", - "xtend": "4.0.1" + "through2": "~2.0.0", + "xtend": "~4.0.0" } }, - "time-stamp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", - "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", - "dev": true - }, "timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", @@ -12658,26 +15261,43 @@ "integrity": "sha1-m25WnxfmbHnx7tLSX/eWL8dBjkk=" }, "timers-browserify": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", - "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "tiny-lr": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.0.5.tgz", - "integrity": "sha512-YrxUSiMgOVh3PnAqtdAUQuUVEVRnqcRCxJ3BHrl/aaWV2fplKKB60oClM0GH2Gio2hcXvkxMUxsC/vXZrQePlg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", + "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", "dev": true, "requires": { - "body": "5.1.0", - "debug": "2.6.9", - "faye-websocket": "0.10.0", - "livereload-js": "2.2.2", - "object-assign": "4.1.1", - "qs": "6.5.1" + "body": "^5.1.0", + "debug": "^3.1.0", + "faye-websocket": "~0.10.0", + "livereload-js": "^2.3.0", + "object-assign": "^4.1.0", + "qs": "^6.4.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } } }, "tmp": { @@ -12686,18 +15306,17 @@ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.2" } }, "to-absolute-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.1.tgz", - "integrity": "sha1-cMN1gFueMQXome6NvdapqhCPQHs=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-absolute": "0.2.6", - "is-negated-glob": "1.0.0" + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" } }, "to-array": { @@ -12713,9 +15332,9 @@ "dev": true }, "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, "to-object-path": { @@ -12724,46 +15343,30 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "to-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz", - "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "regex-not": "1.0.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -12772,19 +15375,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - } + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "to-through": { @@ -12793,33 +15385,34 @@ "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", "dev": true, "requires": { - "through2": "2.0.3" + "through2": "^2.0.3" } }, "topo": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.0.tgz", - "integrity": "sha512-Tlu1fGlR90iCdIPURqPiufqAlCZYzLjHYVVbcFWDMcX7+tK8hdZWAfsMrD/pBul9jqHHwFjNdf1WaxA9vTRRhw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", + "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", "dev": true, "requires": { - "hoek": "5.0.2" - }, - "dependencies": { - "hoek": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.2.tgz", - "integrity": "sha512-NA10UYP9ufCtY2qYGkZktcQXwVyYK4zK0gkaFSB96xhtlo6V8tKXdQgx8eHolQTRemaW0uLn8BhjhwqrOU+QLQ==", - "dev": true - } + "hoek": "6.x.x" } }, "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, "requires": { - "punycode": "1.4.1" + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } } }, "transform-loader": { @@ -12828,20 +15421,7 @@ "integrity": "sha1-5ch4d7qW1R0/IlNoWHtG4ibRzsk=", "dev": true, "requires": { - "loader-utils": "1.1.0" - }, - "dependencies": { - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - } + "loader-utils": "^1.0.2" } }, "trim": { @@ -12851,15 +15431,15 @@ "dev": true }, "trim-lines": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-1.1.0.tgz", - "integrity": "sha1-mSbQPt4Tuhj31CIiYx+wTHn/Jv4=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-1.1.1.tgz", + "integrity": "sha512-X+eloHbgJGxczUk1WSjIvn7aC9oN3jVE3rQfRVKcgpavi3jxtCn0VVKtjOBj64Yop96UYn/ujJRpTbCdAF1vyg==", "dev": true }, "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", "dev": true }, "trim-off-newlines": { @@ -12868,6 +15448,15 @@ "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", "dev": true }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -12875,15 +15464,27 @@ "dev": true }, "trim-trailing-lines": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.0.tgz", - "integrity": "sha1-eu+7eAjfnWafbaLkOMrIxGradoQ=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz", + "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==", "dev": true }, "trough": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.3.tgz", + "integrity": "sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==", + "dev": true + }, + "tryer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.1.tgz", - "integrity": "sha1-qf2LA5Swro//guBjOgo2zK1bX4Y=", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", "dev": true }, "tty-browserify": { @@ -12898,15 +15499,14 @@ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true + "dev": true }, "type-check": { "version": "0.3.2", @@ -12914,22 +15514,22 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-detect": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.5.tgz", - "integrity": "sha512-N9IvkQslUGYGC24RkJk1ba99foK6TkwC2FHAEBlQFBP0RxQZS8ZpJuAZcwiY/w9ZJHFQb1aOXBI60OdxhTrwEQ==" + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.17" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -12939,25 +15539,25 @@ "dev": true }, "ua-parser-js": { - "version": "0.7.17", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", - "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", + "version": "0.7.19", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.19.tgz", + "integrity": "sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ==", "dev": true }, "uglify-es": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.2.2.tgz", - "integrity": "sha512-l+s5VLzFwGJfS+fbqaGf/Dfwo1MF13jLOF2ekL0PytzqEqQ6cVppvHf4jquqFok+35USMpKjqkYxy6pQyUcuug==", + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "dev": true, "requires": { - "commander": "2.12.2", - "source-map": "0.6.1" + "commander": "~2.13.0", + "source-map": "~0.6.1" }, "dependencies": { "commander": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", - "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", "dev": true }, "source-map": { @@ -12968,76 +15568,34 @@ } } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz", + "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", "dev": true, "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.1.0" + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" }, "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - } - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } } } }, "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, "unc-path-regex": { @@ -13047,28 +15605,55 @@ "dev": true }, "unherit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.0.tgz", - "integrity": "sha1-a5qu379z3xdWrZ4xbdmBiFhAzX0=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz", + "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==", "dev": true, "requires": { - "inherits": "2.0.3", - "xtend": "4.0.1" + "inherits": "^2.0.1", + "xtend": "^4.0.1" } }, - "unified": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/unified/-/unified-6.1.6.tgz", - "integrity": "sha512-pW2f82bCIo2ifuIGYcV12fL96kMMYgw7JKVEgh7ODlrM9rj6vXSY3BV+H6lCcv1ksxynFf582hwWLnA1qRFy4w==", + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "dev": true, "requires": { - "bail": "1.0.2", - "extend": "3.0.1", - "is-plain-obj": "1.1.0", - "trough": "1.0.1", - "vfile": "2.3.0", - "x-is-function": "1.0.4", - "x-is-string": "0.1.0" + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", + "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", + "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==", + "dev": true + }, + "unified": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", + "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^2.0.0", + "x-is-string": "^0.1.0" } }, "union-value": { @@ -13077,34 +15662,61 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, "set-value": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", + "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, "unique-stream": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", "dev": true, "requires": { - "json-stable-stringify": "1.0.1", - "through2-filter": "2.0.0" + "json-stable-stringify": "^1.0.0", + "through2-filter": "^2.0.0" } }, "unique-string": { @@ -13113,73 +15725,73 @@ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", "dev": true, "requires": { - "crypto-random-string": "1.0.0" + "crypto-random-string": "^1.0.0" } }, "unist-builder": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-1.0.2.tgz", - "integrity": "sha1-jDuZA+9kvPsRfdfPal2Y/Bs7J7Y=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-1.0.3.tgz", + "integrity": "sha512-/KB8GEaoeHRyIqClL+Kam+Y5NWJ6yEiPsAfv1M+O1p+aKGgjR89WwoEHKTyOj17L6kAlqtKpAgv2nWvdbQDEig==", "dev": true, "requires": { - "object-assign": "4.1.1" + "object-assign": "^4.1.0" } }, "unist-util-generated": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.1.tgz", - "integrity": "sha1-mfFseJWayFTe58YVwpGSTIv03n8=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.3.tgz", + "integrity": "sha512-qlPeDqnQnd84KIqwphzOR+l02cxjDzvEYEBl84EjmKRrX4eUmjyAo8xJv1SCDhJqNjyHRnBMZWNKAiBtXE6hBg==", "dev": true }, "unist-util-is": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.1.tgz", - "integrity": "sha1-DDEmKeP5YMZukx6BLT2A53AQlHs=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz", + "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==", "dev": true }, - "unist-util-modify-children": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-1.1.1.tgz", - "integrity": "sha1-ZtfmpEnm9nIguXarPLi166w55R0=", - "dev": true, - "requires": { - "array-iterate": "1.1.1" - } - }, "unist-util-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.0.tgz", - "integrity": "sha1-5uHgPu64HF4a/lU+jUrfvXwNj4I=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.2.tgz", + "integrity": "sha512-npmFu92l/+b1Ao6uGP4I1WFz9hsKv7qleZ4aliw6x0RVu6A9A3tAf57NMpFfzQ02jxRtJZuRn+C8xWT7GWnH0g==", "dev": true }, "unist-util-remove-position": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.1.tgz", - "integrity": "sha1-WoXBVV/BugwQG4ZwfRXlD6TIcbs=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz", + "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==", "dev": true, "requires": { - "unist-util-visit": "1.3.0" + "unist-util-visit": "^1.1.0" } }, "unist-util-stringify-position": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.1.tgz", - "integrity": "sha1-PMvcU2ee7W7PN3fdf14yKcG2qjw=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", "dev": true }, "unist-util-visit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.3.0.tgz", - "integrity": "sha512-9ntYcxPFtl44gnwXrQKZ5bMqXMY0ZHzUpqMFiU4zcc8mmf/jzYm8GhYgezuUlX4cJIM1zIDYaO6fG/fI+L6iiQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.0.tgz", + "integrity": "sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==", "dev": true, "requires": { - "unist-util-is": "2.1.1" + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz", + "integrity": "sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==", + "dev": true, + "requires": { + "unist-util-is": "^2.1.2" } }, "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, "unpipe": { @@ -13194,8 +15806,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -13204,9 +15816,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -13225,12 +15837,6 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true } } }, @@ -13240,21 +15846,37 @@ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", "dev": true }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, "update-notifier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz", - "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", "dev": true, "requires": { - "boxen": "1.3.0", - "chalk": "2.3.0", - "configstore": "3.1.1", - "import-lazy": "2.1.0", - "is-installed-globally": "0.1.0", - "is-npm": "1.0.0", - "latest-version": "3.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "3.0.0" + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" } }, "urix": { @@ -13282,14 +15904,28 @@ } }, "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "dev": true, "requires": { - "prepend-http": "1.0.4" + "prepend-http": "^2.0.0" + }, + "dependencies": { + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + } } }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true + }, "urlgrey": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", @@ -13297,49 +15933,10 @@ "dev": true }, "use": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", - "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", - "dev": true, - "requires": { - "define-property": "0.2.5", - "isobject": "3.0.1", - "lazy-cache": "2.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, "useragent": { "version": "2.2.1", @@ -13347,8 +15944,8 @@ "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", "dev": true, "requires": { - "lru-cache": "2.2.4", - "tmp": "0.0.33" + "lru-cache": "2.2.x", + "tmp": "0.0.x" }, "dependencies": { "lru-cache": { @@ -13360,20 +15957,12 @@ } }, "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "dev": true, "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } + "inherits": "2.0.3" } }, "util-deprecate": { @@ -13382,6 +15971,16 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -13389,9 +15988,15 @@ "dev": true }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", + "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", "dev": true }, "vali-date": { @@ -13401,13 +16006,13 @@ "dev": true }, "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "value-or-function": { @@ -13421,23 +16026,21 @@ "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.0.tgz", "integrity": "sha1-2Ca4n3SQcy+rwMDtaT7Uddyynr8=" }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "extsprintf": "^1.2.0" } }, "vfile": { @@ -13446,25 +16049,25 @@ "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", "dev": true, "requires": { - "is-buffer": "1.1.6", + "is-buffer": "^1.1.4", "replace-ext": "1.0.0", - "unist-util-stringify-position": "1.1.1", - "vfile-message": "1.0.0" + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" } }, "vfile-location": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.2.tgz", - "integrity": "sha1-02dcWch3SY5JK0dW/2Xkrxp1IlU=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.3.tgz", + "integrity": "sha512-zM5/l4lfw1CBoPx3Jimxoc5RNDAHHpk6AM6LM0pTIkm5SUSsx8ZekZ0PVdf0WEZ7kjlhSt7ZlqbRL6Cd6dBs6A==", "dev": true }, "vfile-message": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.0.tgz", - "integrity": "sha512-HPREhzTOB/sNDc9/Mxf8w0FmHnThg5CRSJdR9VRFkD2riqYWs+fuXlj5z8mIpv2LrD7uU41+oPWFOL4Mjlf+dw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.1.tgz", + "integrity": "sha512-vSGCkhNvJzO6VcWC6AlJW4NtYOVtS+RgCaqFIYUjoGIlHnFL+i0LbtYvonDWOMcB97uTPT4PRsyYY7REWC9vug==", "dev": true, "requires": { - "unist-util-stringify-position": "1.1.1" + "unist-util-stringify-position": "^1.1.1" } }, "vfile-reporter": { @@ -13473,37 +16076,54 @@ "integrity": "sha1-6m8K4TQvSEFXOYXgX5QXNvJ96do=", "dev": true, "requires": { - "repeat-string": "1.6.1", - "string-width": "1.0.2", - "supports-color": "4.5.0", - "unist-util-stringify-position": "1.1.1", - "vfile-statistics": "1.1.0" + "repeat-string": "^1.5.0", + "string-width": "^1.0.0", + "supports-color": "^4.1.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-statistics": "^1.1.0" + }, + "dependencies": { + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } + } } }, "vfile-sort": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.1.0.tgz", - "integrity": "sha1-SVAcnou+Wt/y6bOnZx7hseIMUhA=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.1.2.tgz", + "integrity": "sha512-KoX1SaGv5CGoIIPHScklExODrVzCFC5Zo0uBM7iQTmd0PtbCswVIQ2cSESUak/dUICNc2lJyDzl9tXEB+4+P/g==", "dev": true }, "vfile-statistics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.0.tgz", - "integrity": "sha1-AhBMYP3u0dEbH3OtZTMLdjSz2JU=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.1.tgz", + "integrity": "sha512-dxUM6IYvGChHuwMT3dseyU5BHprNRXzAV0OHx1A769lVGsTiT50kU7BbpRFV+IE6oWmU+PwHdsTKfXhnDIRIgQ==", "dev": true }, "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", "dev": true, "requires": { - "clone": "2.1.1", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.0.0", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } }, "vinyl-fs": { @@ -13512,29 +16132,55 @@ "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", "dev": true, "requires": { - "duplexify": "3.5.1", - "glob-stream": "5.3.5", - "graceful-fs": "4.1.11", + "duplexify": "^3.2.0", + "glob-stream": "^5.3.2", + "graceful-fs": "^4.0.0", "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "0.3.0", - "lazystream": "1.0.0", - "lodash.isequal": "4.5.0", - "merge-stream": "1.0.1", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "readable-stream": "2.3.3", - "strip-bom": "2.0.0", - "strip-bom-stream": "1.0.0", - "through2": "2.0.3", - "through2-filter": "2.0.0", - "vali-date": "1.0.0", - "vinyl": "1.2.0" + "is-valid-glob": "^0.3.0", + "lazystream": "^1.0.0", + "lodash.isequal": "^4.0.0", + "merge-stream": "^1.0.0", + "mkdirp": "^0.5.0", + "object-assign": "^4.0.0", + "readable-stream": "^2.0.4", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^1.0.0", + "through2": "^2.0.0", + "through2-filter": "^2.0.0", + "vali-date": "^1.0.0", + "vinyl": "^1.0.0" }, "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, "clone-stats": { @@ -13543,27 +16189,44 @@ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", "dev": true }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, "glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-stream": { @@ -13572,53 +16235,53 @@ "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", "dev": true, "requires": { - "extend": "3.0.1", - "glob": "5.0.15", - "glob-parent": "3.1.0", - "micromatch": "2.3.11", - "ordered-read-streams": "0.3.0", - "through2": "0.6.5", - "to-absolute-glob": "0.1.1", - "unique-stream": "2.2.1" + "extend": "^3.0.0", + "glob": "^5.0.3", + "glob-parent": "^3.0.0", + "micromatch": "^2.3.7", + "ordered-read-streams": "^0.3.0", + "through2": "^0.6.0", + "to-absolute-glob": "^0.1.1", + "unique-stream": "^2.0.2" }, "dependencies": { "readable-stream": { "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "through2": { "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "resolved": "http://registry.npmjs.org/through2/-/through2-0.6.5.tgz", "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } }, "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^1.0.0" } }, "is-valid-glob": { @@ -13633,42 +16296,34 @@ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } }, "ordered-read-streams": { @@ -13677,8 +16332,8 @@ "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", "dev": true, "requires": { - "is-stream": "1.1.0", - "readable-stream": "2.3.3" + "is-stream": "^1.0.1", + "readable-stream": "^2.0.1" } }, "replace-ext": { @@ -13699,7 +16354,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "to-absolute-glob": { @@ -13708,7 +16363,7 @@ "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", "dev": true, "requires": { - "extend-shallow": "2.0.1" + "extend-shallow": "^2.0.1" } }, "vinyl": { @@ -13717,8 +16372,8 @@ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "dev": true, "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } } @@ -13730,13 +16385,13 @@ "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", "dev": true, "requires": { - "append-buffer": "1.0.2", - "convert-source-map": "1.5.1", - "graceful-fs": "4.1.11", - "normalize-path": "2.1.1", - "now-and-later": "2.0.0", - "remove-bom-buffer": "3.0.0", - "vinyl": "2.1.0" + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" } }, "vm-browserify": { @@ -13754,211 +16409,188 @@ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true }, - "watchpack": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", - "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "vue-template-compiler": { + "version": "2.5.17", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.17.tgz", + "integrity": "sha512-63uI4syCwtGR5IJvZM0LN5tVsahrelomHtCxvRkZPJ/Tf3ADm1U1wG6KWycK3qCfqR+ygM5vewUvmJ0REAYksg==", "dev": true, "requires": { - "async": "2.6.0", - "chokidar": "1.7.0", - "graceful-fs": "4.1.11" + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" } }, "webpack": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.10.0.tgz", - "integrity": "sha512-fxxKXoicjdXNUMY7LIdY89tkJJJ0m1Oo8PQutZ5rLgWbV5QVKI15Cn7+/IHnRTd3vfKfiwBx6SBqlorAuNA8LA==", + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.25.1.tgz", + "integrity": "sha512-T0GU/3NRtO4tMfNzsvpdhUr8HnzA4LTdP2zd+e5zd6CdOH5vNKHnAlO+DvzccfhPdzqRrALOFcjYxx7K5DWmvA==", "dev": true, "requires": { - "acorn": "5.2.1", - "acorn-dynamic-import": "2.0.2", - "ajv": "5.5.1", - "ajv-keywords": "2.1.1", - "async": "2.6.0", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.1.0", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.5.0", - "tapable": "0.2.8", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.4.0", - "webpack-sources": "1.1.0", - "yargs": "8.0.2" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/wasm-edit": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.1.0", + "uglifyjs-webpack-plugin": "^1.2.4", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" }, "dependencies": { - "ajv": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.1.tgz", - "integrity": "sha1-s4u4h22ehr7plJVqBOch6IskjrI=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { + "eslint-scope": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + } + } + }, + "webpack-bundle-analyzer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.3.tgz", + "integrity": "sha512-naLWiRfmtH4UJgtUktRTLw6FdoZJ2RvCR9ePbwM9aRMsS/KjFerkPZG9epEvXRAw5d5oPdrs9+3p+afNjxW8Xw==", + "dev": true, + "requires": { + "acorn": "^5.7.3", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.10", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.0.0" + }, + "dependencies": { + "ws": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.0.tgz", + "integrity": "sha512-H3dGVdGvW2H8bnYpIDc3u3LH8Wue3Qh+Zto6aXXFzvESkTVT6rAfKR6tR/+coaUvxs8yHtmNV0uioBF62ZGSTg==", "dev": true, "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" + "async-limiter": "~1.0.0" + } + } + } + }, + "webpack-cli": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.1.2.tgz", + "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.0", + "global-modules-path": "^2.3.0", + "import-local": "^2.0.0", + "interpret": "^1.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.5.0", + "v8-compile-cache": "^2.0.2", + "yargs": "^12.0.2" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } } } }, "webpack-dev-middleware": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", - "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", + "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", "dev": true, "requires": { - "memory-fs": "0.4.1", - "mime": "1.6.0", - "path-is-absolute": "1.0.1", - "range-parser": "1.2.0", - "time-stamp": "2.0.0" + "memory-fs": "~0.4.1", + "mime": "^2.3.1", + "range-parser": "^1.0.3", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "dev": true + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" } }, "webpack-merge": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.1.tgz", - "integrity": "sha512-geQsZ86YkXOVOjvPC5yv3JSNnL6/X3Kzh935AQ/gJNEYXEfJDQFu/sdFuktS9OW2JcH/SJec8TGfRdrpHshH7A==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.4.tgz", + "integrity": "sha512-TmSe1HZKeOPey3oy1Ov2iS3guIZjWvMT2BBJDzzT5jScHTjVC3mpjJofgueEzaEd6ibhxRDD6MIblDr8tzh8iQ==", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.17.5" } }, "webpack-sources": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -13975,8 +16607,8 @@ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": "0.4.9", - "websocket-extensions": "0.1.3" + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -13986,18 +16618,18 @@ "dev": true }, "whatwg-fetch": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", - "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==", "dev": true }, "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -14007,12 +16639,12 @@ "dev": true }, "widest-line": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", - "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", "dev": true, "requires": { - "string-width": "2.1.1" + "string-width": "^2.1.1" }, "dependencies": { "ansi-regex": { @@ -14033,8 +16665,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -14043,31 +16675,34 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", "dev": true }, + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, "wrap-ansi": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" } }, "wrappy": { @@ -14081,7 +16716,7 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, "write-file-atomic": { @@ -14090,33 +16725,22 @@ "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, "ws": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", - "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dev": true, "requires": { - "options": "0.0.6", - "ultron": "1.0.2" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" } }, - "wtf-8": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", - "dev": true - }, - "x-is-function": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/x-is-function/-/x-is-function-1.0.4.tgz", - "integrity": "sha1-XSlNw9Joy90GJYDgxd93o5HR+h4=", - "dev": true - }, "x-is-string": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", @@ -14129,10 +16753,28 @@ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", "dev": true }, + "xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=", + "dev": true + }, + "xmlbuilder": { + "version": "8.2.2", + "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", + "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=", + "dev": true + }, "xmlhttprequest-ssl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", "dev": true }, "xtend": { @@ -14153,23 +16795,23 @@ "dev": true }, "yargs": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.0.3.tgz", - "integrity": "sha512-DqBpQ8NAUX4GyPP/ijDGHsJya4tYqLQrjPr95HNsr1YwL3+daCfvBwg7+gIC6IdJhR2kATh3hb61vjzMWEtjdw==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", + "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", "dev": true, "requires": { - "cliui": "3.2.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "8.0.0" + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" }, "dependencies": { "ansi-regex": { @@ -14178,20 +16820,148 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "mem": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", + "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" + } + }, + "os-locale": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz", + "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", + "dev": true, + "requires": { + "execa": "^0.10.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-limit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -14200,27 +16970,36 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "yargs-parser": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.0.0.tgz", - "integrity": "sha1-IdR2Mw5agieaS4gTRb8GYQLiGcY=", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } }, "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.0.0.tgz", + "integrity": "sha512-dvsafRjM45h79WOTvS/dP35Sb31SlGAKz6tFjI97kGC4MJFBuzTZY6TTYHrz0QSMQdkyd8Y+RsOMLr+JY0nPFQ==", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true + } } }, "yeast": { diff --git a/package.json b/package.json index bea1f54..ae59561 100644 --- a/package.json +++ b/package.json @@ -7,14 +7,15 @@ "libp2p-tcp": false }, "scripts": { - "test": "exit(0)", + "test": "node -e 'process.exit()'", + "test:node": "node -e 'process.exit()'", "build": "aegir build -t node", "lint": "aegir lint", "release": "aegir release -t node", "release-minor": "aegir release -t node --type minor", "release-major": "aegir release -t node --type major", - "coverage": "exit(0)", - "coverage-publish": "exit(0)" + "coverage": "node -e 'process.exit()'", + "coverage-publish": "node -e 'process.exit()'" }, "repository": { "type": "git", @@ -32,18 +33,18 @@ }, "homepage": "https://github.com/libp2p/interface-stream-muxer", "dependencies": { - "async": "^2.6.0", - "chai": "^4.1.2", + "async": "^2.6.1", + "chai": "^4.2.0", "chai-checkmark": "^1.0.1", - "detect-node": "^2.0.3", - "libp2p-tcp": "~0.11.1", - "multiaddr": "^3.0.1", + "detect-node": "^2.0.4", + "libp2p-tcp": "~0.13.0", + "multiaddr": "^5.0.2", "pull-generate": "^2.2.0", "pull-pair": "^1.1.0", - "pull-stream": "^3.6.1" + "pull-stream": "^3.6.9" }, "devDependencies": { - "aegir": "^12.2.0" + "aegir": "^17.0.1" }, "contributors": [ "David Dias ", diff --git a/src/close-test.js b/src/close-test.js index b4df80e..2a64159 100644 --- a/src/close-test.js +++ b/src/close-test.js @@ -54,7 +54,6 @@ module.exports = (common) => { tcpListener.listen(mh, () => { const dialerConn = tcp.dial(mh, () => { - const dialerMuxer = muxer.dialer(dialerConn) const s1 = dialerMuxer.newStream((err) => { expect(err).to.not.exist.mark() diff --git a/src/spawner.js b/src/spawner.js index 51a74a8..577349e 100644 --- a/src/spawner.js +++ b/src/spawner.js @@ -80,6 +80,7 @@ function marker (n, done) { i++ if (err) { + /* eslint-disable-next-line */ console.error('Failed after %s iterations', i) return done(err) } From af8dd54bc9e313c23a4e46850f84e8e75b323476 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 9 Nov 2018 13:59:27 +0100 Subject: [PATCH 251/337] chore: update travis versions --- .travis.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 610c492..dee4ba6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,12 +3,10 @@ language: node_js matrix: include: - - node_js: 4 + - node_js: 8 + env: CXX=g++-4.8 + - node_js: 10 env: CXX=g++-4.8 - - node_js: 6 - env: - - SAUCE=true - - CXX=g++-4.8 - node_js: stable env: CXX=g++-4.8 From 9fe803f2715df9eee23a872a1090e82005ad5f14 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 9 Nov 2018 16:08:48 +0100 Subject: [PATCH 252/337] chore: add lead maintainer --- README.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a2f138..b00f726 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,10 @@ Publishing a test suite as a module lets multiple modules all ensure compatibili The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. +## Lead Maintainer + +[Jacob Heun](https://github.com/jacobheun/) + ## Modules that implement the interface - [JavaScript libp2p-spdy](https://github.com/libp2p/js-libp2p-spdy) diff --git a/package.json b/package.json index ae59561..961330e 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "interface-stream-muxer", "version": "0.5.9", "description": "A test suite and interface you can use to implement a stream muxer.", + "leadMaintainer": "Jacob Heun ", "main": "src/index.js", "browser": { "libp2p-tcp": false @@ -26,7 +27,6 @@ "Muxer", "Interface" ], - "author": "David Dias ", "license": "MIT", "bugs": { "url": "https://github.com/libp2p/interface-stream-muxer/issues" From 05e85228227ff32b14fe7c8050e9bc9c6fcec107 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Tue, 13 Nov 2018 18:38:20 +0100 Subject: [PATCH 253/337] chore: update contributors --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 961330e..f530bc5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.5.9", + "version": "0.6.0", "description": "A test suite and interface you can use to implement a stream muxer.", "leadMaintainer": "Jacob Heun ", "main": "src/index.js", @@ -51,6 +51,7 @@ "David Dias ", "Dmitriy Ryajov ", "Friedel Ziegelmayer ", + "Jacob Heun ", "Jeffrey Hulten ", "greenkeeperio-bot ", "ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ " From a2fda07d2b8608460a2f22445b969d206603ede3 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Tue, 13 Nov 2018 18:38:21 +0100 Subject: [PATCH 254/337] chore: release version v0.6.0 --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57fb519..7df0e4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ + +# [0.6.0](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.9...v0.6.0) (2018-11-13) + + +### Bug Fixes + +* improve the close test ([d9c8681](https://github.com/libp2p/interface-stream-muxer/commit/d9c8681)) + + + ## [0.5.9](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.8...v0.5.9) (2017-12-14) From 902f3aa1d6f99e46a966c4ac4096bc9c727f4acc Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 9 Nov 2018 16:26:01 +0100 Subject: [PATCH 255/337] chore: add lead maintainer chore: update dependencies --- README.md | 4 ++++ package.json | 19 +++++++++---------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 6a2e31a..f8499dc 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,10 @@ Publishing a test suite as a module lets multiple modules all ensure compatibili The API is presented with both Node.js and Go primitives, however, there is no actual limitations for it to be extended to any other language, pushing forward the cross compatibility and interop through diferent stacks. +## Lead Maintainer + +[Jacob Heun](https://github.com/jacobheun/) + # Modules that implement the interface - [js-libp2p-tcp](https://github.com/libp2p/js-libp2p-tcp) diff --git a/package.json b/package.json index 09dee39..8b69b4a 100644 --- a/package.json +++ b/package.json @@ -2,18 +2,18 @@ "name": "interface-connection", "version": "0.3.2", "description": "A test suite and interface you can use to implement a connection interface.", + "leadMaintainer": "Jacob Heun ", "main": "src/index.js", "scripts": { - "lint": "aegir-lint", - "build": "aegir-build", - "test": "exit 0", + "lint": "aegir lint", + "build": "aegir build", + "test": "node -e 'process.exit()'", "release": "aegir-release --node", "release-minor": "aegir-release --type minor", "release-major": "aegir-release --type major" }, "pre-commit": [ - "lint", - "test" + "lint" ], "repository": { "type": "git", @@ -22,7 +22,6 @@ "keywords": [ "IPFS" ], - "author": "David Dias ", "license": "MIT", "bugs": { "url": "https://github.com/libp2p/interface-connection/issues" @@ -30,14 +29,14 @@ "homepage": "https://github.com/libp2p/interface-connection", "dependencies": { "timed-tape": "~0.1.1", - "pull-defer": "~0.2.2" + "pull-defer": "~0.2.3" }, "devDependencies": { - "aegir": "^11.0.0" + "aegir": "^17.0.1" }, "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" + "node": ">=8.0.0", + "npm": ">=6.0.0" }, "contributors": [ "David Dias ", From 810b4600b03c3f861f1c0d7f0d9bfd5b9f2d08df Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 9 Nov 2018 16:27:16 +0100 Subject: [PATCH 256/337] chore: add files field for npm publishing --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index 8b69b4a..ed6bb6b 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,9 @@ "description": "A test suite and interface you can use to implement a connection interface.", "leadMaintainer": "Jacob Heun ", "main": "src/index.js", + "files": [ + "src" + ], "scripts": { "lint": "aegir lint", "build": "aegir build", From 6578a84236f8377871a2df4d4ffbb4b33918bcda Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 9 Nov 2018 16:29:35 +0100 Subject: [PATCH 257/337] chore: update ci --- .gitignore | 1 + .travis.yml | 24 ++---------------------- circle.yml | 15 --------------- 3 files changed, 3 insertions(+), 37 deletions(-) delete mode 100644 circle.yml diff --git a/.gitignore b/.gitignore index 907c78a..229031f 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ build/Release node_modules dist +package-lock.json diff --git a/.travis.yml b/.travis.yml index df53c3d..dc01dc2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,14 +3,9 @@ language: node_js matrix: include: - - node_js: 4 - env: CXX=g++-4.8 - - node_js: 6 - env: - - SAUCE=true - - CXX=g++-4.8 + - node_js: 8 + - node_js: 10 - node_js: stable - env: CXX=g++-4.8 # Make sure we have new NPM. before_install: @@ -18,18 +13,3 @@ before_install: script: - npm run lint - -before_script: - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start - -after_success: - - npm run coverage-publish - -addons: - firefox: 'latest' - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.8 \ No newline at end of file diff --git a/circle.yml b/circle.yml deleted file mode 100644 index 95f6ee4..0000000 --- a/circle.yml +++ /dev/null @@ -1,15 +0,0 @@ -machine: - node: - version: stable - -test: - override: - - npm run lint -dependencies: - pre: - - google-chrome --version - - wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - - - sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' - - sudo apt-get update - - sudo apt-get --only-upgrade install google-chrome-stable - - google-chrome --version From d7c36330bc39a5b1a2540aa40d9b43e5ef45ff59 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Thu, 29 Nov 2018 14:19:46 +0100 Subject: [PATCH 258/337] chore: update deps --- package.json | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index ed6bb6b..3288991 100644 --- a/package.json +++ b/package.json @@ -5,15 +5,16 @@ "leadMaintainer": "Jacob Heun ", "main": "src/index.js", "files": [ + "dist", "src" ], "scripts": { "lint": "aegir lint", "build": "aegir build", "test": "node -e 'process.exit()'", - "release": "aegir-release --node", - "release-minor": "aegir-release --type minor", - "release-major": "aegir-release --type major" + "release": "aegir release --no-test", + "release-minor": "aegir release --type minor --no-test", + "release-major": "aegir release --type major --no-test" }, "pre-commit": [ "lint" @@ -31,11 +32,11 @@ }, "homepage": "https://github.com/libp2p/interface-connection", "dependencies": { - "timed-tape": "~0.1.1", "pull-defer": "~0.2.3" }, "devDependencies": { - "aegir": "^17.0.1" + "aegir": "^17.1.1", + "timed-tape": "~0.1.1" }, "engines": { "node": ">=8.0.0", From 1ac17d660e813ace8a2c26bf5efd7fdcffe477e0 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Thu, 29 Nov 2018 14:25:11 +0100 Subject: [PATCH 259/337] chore: update contributors --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 3288991..aff10a0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.3.2", + "version": "0.3.3", "description": "A test suite and interface you can use to implement a connection interface.", "leadMaintainer": "Jacob Heun ", "main": "src/index.js", @@ -46,6 +46,8 @@ "David Dias ", "Friedel Ziegelmayer ", "Greenkeeper ", + "Jacob Heun ", + "James Ray <16969914+jamesray1@users.noreply.github.com>", "Pau Ramon Revilla ", "Richard Littauer " ] From 4e138dba674535e2b394b4508f2332dce2171962 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Thu, 29 Nov 2018 14:25:11 +0100 Subject: [PATCH 260/337] chore: release version v0.3.3 --- CHANGELOG.md | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..f2cbf76 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,90 @@ + +## [0.3.3](https://github.com/libp2p/interface-connection/compare/v0.3.1...v0.3.3) (2018-11-29) + + + + +## [0.3.1](https://github.com/libp2p/interface-connection/compare/v0.3.0...v0.3.1) (2017-02-09) + + + + +# [0.3.0](https://github.com/libp2p/interface-connection/compare/v0.2.1...v0.3.0) (2016-11-03) + + +### Features + +* async crypto + sauce labs + aegir 9 ([b40114c](https://github.com/libp2p/interface-connection/commit/b40114c)) + + + + +## [0.2.1](https://github.com/libp2p/interface-connection/compare/v0.2.0...v0.2.1) (2016-09-05) + + +### Bug Fixes + +* **package.json:** point to right main ([84cd2ca](https://github.com/libp2p/interface-connection/commit/84cd2ca)) + + + + +# [0.2.0](https://github.com/libp2p/interface-connection/compare/v0.1.8...v0.2.0) (2016-09-05) + + +### Bug Fixes + +* **deps:** fix package.json ([e0f7db3](https://github.com/libp2p/interface-connection/commit/e0f7db3)) + + +### Features + +* **connection:** migrate to pull-streams ([ed5727a](https://github.com/libp2p/interface-connection/commit/ed5727a)) + + + + +## [0.1.8](https://github.com/libp2p/interface-connection/compare/v0.1.7...v0.1.8) (2016-08-03) + + + + +## [0.1.7](https://github.com/libp2p/interface-connection/compare/v0.1.6...v0.1.7) (2016-06-27) + + + + +## [0.1.6](https://github.com/libp2p/interface-connection/compare/v0.1.5...v0.1.6) (2016-06-23) + + + + +## [0.1.5](https://github.com/libp2p/interface-connection/compare/v0.1.4...v0.1.5) (2016-06-23) + + + + +## [0.1.4](https://github.com/libp2p/interface-connection/compare/v0.1.3...v0.1.4) (2016-06-23) + + + + +## [0.1.3](https://github.com/libp2p/interface-connection/compare/v0.1.0...v0.1.3) (2016-06-16) + + + + +# [0.1.0](https://github.com/libp2p/interface-connection/compare/v0.0.3...v0.1.0) (2016-06-16) + + + + +## [0.0.3](https://github.com/libp2p/interface-connection/compare/v0.0.1...v0.0.3) (2015-12-12) + + + + +## 0.0.1 (2015-09-17) + + + From ecdaf40107bbf95881bd5d8f4bdfe39be7248e24 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 9 Nov 2018 16:14:14 +0100 Subject: [PATCH 261/337] chore: add lead maintainer --- README.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 53100e2..cb3fd3b 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,10 @@ The purpose of this interface is not to reinvent any wheels when it comes to dia The API is presented with both Node.js and Go primitives, however, there are no actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. +## Lead Maintainer + +[Jacob Heun](https://github.com/jacobheun/) + # Modules that implement the interface - [js-libp2p-tcp](https://github.com/libp2p/js-libp2p-tcp) diff --git a/package.json b/package.json index 743138a..e6a6067 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "interface-transport", "version": "0.3.6", "description": "A test suite and interface you can use to implement a transport.", + "leadMaintainer": "Jacob Heun ", "repository": { "type": "git", "url": "https://github.com/libp2p/interface-transport.git" @@ -24,7 +25,6 @@ "keywords": [ "IPFS" ], - "author": "David Dias ", "license": "MIT", "bugs": { "url": "https://github.com/libp2p/interface-transport/issues" From 84166fa0ea166f121277986bbe17d00f59b53826 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 9 Nov 2018 16:19:18 +0100 Subject: [PATCH 262/337] chore: update deps and fix linting --- .gitignore | 1 + package.json | 18 ++++++++++-------- src/listen-test.js | 2 ++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 254988d..e1a7614 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ **/node_modules/ **/*.log test/repo-tests* +package-lock.json # Logs logs diff --git a/package.json b/package.json index e6a6067..013148f 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,9 @@ "url": "https://github.com/libp2p/interface-transport.git" }, "main": "src/index.js", + "files": [ + "src" + ], "scripts": { "lint": "aegir lint", "test": "aegir test", @@ -19,8 +22,7 @@ "coverage-publish": "exit(0)" }, "pre-commit": [ - "lint", - "test" + "lint" ], "keywords": [ "IPFS" @@ -31,15 +33,15 @@ }, "homepage": "https://github.com/libp2p/interface-transport", "devDependencies": { - "aegir": "^13.0.6", + "aegir": "^17.0.1", "dirty-chai": "^2.0.1" }, "dependencies": { - "chai": "^4.1.2", - "multiaddr": "^4.0.0", - "pull-goodbye": "0.0.2", - "pull-serializer": "^0.3.2", - "pull-stream": "^3.6.7" + "chai": "^4.2.0", + "multiaddr": "^5.0.2", + "pull-goodbye": "~0.0.2", + "pull-serializer": "~0.3.2", + "pull-stream": "^3.6.9" }, "contributors": [ "David Dias ", diff --git a/src/listen-test.js b/src/listen-test.js index 847a89d..082361a 100644 --- a/src/listen-test.js +++ b/src/listen-test.js @@ -63,6 +63,7 @@ module.exports = (common) => { }) describe('events', () => { + // eslint-disable-next-line // TODO: figure out why it fails in the full test suite it.skip('connection', (done) => { const finish = plan(2, done) @@ -89,6 +90,7 @@ module.exports = (common) => { listener.listen(addrs[0]) }) + // eslint-disable-next-line // TODO: how to get the listener to emit an error? it.skip('error', (done) => { const listener = transport.createListener() From f2fb04a5d3ae92358d4ba9f3161fdde49f42965c Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Thu, 29 Nov 2018 14:31:06 +0100 Subject: [PATCH 263/337] chore: update aegir commands --- package.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 013148f..28408b9 100644 --- a/package.json +++ b/package.json @@ -9,15 +9,16 @@ }, "main": "src/index.js", "files": [ + "dist", "src" ], "scripts": { "lint": "aegir lint", "test": "aegir test", - "build": "aegir-build", - "release": "aegir release -t node", - "release-minor": "aegir release --type minor -t node", - "release-major": "aegir release --type major -t node", + "build": "aegir build", + "release": "aegir release --no-test", + "release-minor": "aegir release --type minor --no-test", + "release-major": "aegir release --type major --no-test", "coverage": "exit(0)", "coverage-publish": "exit(0)" }, From ad468f47ed879df44c2e861036d8e1f26a324390 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Thu, 29 Nov 2018 14:31:24 +0100 Subject: [PATCH 264/337] chore: update contributors --- package.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 28408b9..cbc48b2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.3.6", + "version": "0.3.7", "description": "A test suite and interface you can use to implement a transport.", "leadMaintainer": "Jacob Heun ", "repository": { @@ -47,6 +47,9 @@ "contributors": [ "David Dias ", "Friedel Ziegelmayer ", + "Jacob Heun ", + "João Santos ", + "Maciej Krüger ", "Richard Littauer ", "dmitriy ryajov ", "greenkeeperio-bot " From 6e99899b3d12437ca700cbcde0f9946869f14c8b Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Thu, 29 Nov 2018 14:31:24 +0100 Subject: [PATCH 265/337] chore: release version v0.3.7 --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea120b0..516a437 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ + +## [0.3.7](https://github.com/libp2p/interface-transport/compare/v0.3.6...v0.3.7) (2018-11-29) + + + ## [0.3.6](https://github.com/libp2p/interface-transport/compare/v0.3.5...v0.3.6) (2018-04-05) From 8537d9aa33d20ac17b8d89313a20266f9d6f18f5 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Mon, 7 Jan 2019 14:26:12 +1100 Subject: [PATCH 266/337] Fix reference to Peer Routing Should fix #2. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 13a9949..978a79d 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ tests(tape, common) # API -A valid (read: that follows this abstraction) Peer Routing module must implement the following API. +A valid (read: that follows this abstraction) Content Routing module must implement the following API. ### `.findProviders` From cf4cbd43b2c71a1b112e87b3f0bcd340b9ae1c79 Mon Sep 17 00:00:00 2001 From: Mike Goelzer Date: Wed, 3 Apr 2019 19:47:27 +0900 Subject: [PATCH 267/337] chore: remove circle ci (#4) See https://github.com/libp2p/team-mgmt/issues/25 Circle CI was deprecate and @jacobheun agreed to remove it from all js repos. This is the only non-JS repo where it still exists. Requesting confirmation from @jacobheun or @daviddias that it's ok to delete this file. --- circle.yml | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 circle.yml diff --git a/circle.yml b/circle.yml deleted file mode 100644 index 434211a..0000000 --- a/circle.yml +++ /dev/null @@ -1,12 +0,0 @@ -machine: - node: - version: stable - -dependencies: - pre: - - google-chrome --version - - wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - - - sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' - - sudo apt-get update - - sudo apt-get --only-upgrade install google-chrome-stable - - google-chrome --version From b30ee5f6afade1126ef3bc85c5242ba22d00cc71 Mon Sep 17 00:00:00 2001 From: dirkmc Date: Thu, 18 Apr 2019 01:35:06 +0800 Subject: [PATCH 268/337] feat: callbacks -> async / await (#44) * feat: callbacks -> async / await BREAKING CHANGE: All places in the API that used callbacks are now replaced with async/await * test: add tests for canceling dials * feat: Adapter class --- README.md | 111 +++++++++++++++++++++++++++-------------- package.json | 10 ++-- src/adapter.js | 80 ++++++++++++++++++++++++++++++ src/dial-test.js | 107 +++++++++++++++++++++++----------------- src/errors.js | 16 ++++++ src/index.js | 3 ++ src/listen-test.js | 120 +++++++++++++++++++-------------------------- 7 files changed, 291 insertions(+), 156 deletions(-) create mode 100644 src/adapter.js create mode 100644 src/errors.js diff --git a/README.md b/README.md index cb3fd3b..bbe4f05 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,9 @@ The primary goal of this module is to enable developers to pick and swap their t Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. -The purpose of this interface is not to reinvent any wheels when it comes to dialing and listening to transports. Instead, it tries to uniform several transports through a shimmed interface. +The purpose of this interface is not to reinvent any wheels when it comes to dialing and listening to transports. Instead, it tries to provide a uniform API for several transports through a shimmed interface. -The API is presented with both Node.js and Go primitives, however, there are no actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. +The API is presented with both Node.js and Go primitives, however there are no actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. ## Lead Maintainer @@ -48,16 +48,32 @@ const YourTransport = require('../src') describe('compliance', () => { tests({ - setup (cb) { - let t = new YourTransport() + setup () { + let transport = new YourTransport() + const addrs = [ multiaddr('valid-multiaddr-for-your-transport'), multiaddr('valid-multiaddr2-for-your-transport') ] - cb(null, t, addrs) + + const network = require('my-network-lib') + const connect = network.connect + const connector = { + delay (delayMs) { + // Add a delay in the connection mechanism for the transport + // (this is used by the dial tests) + network.connect = (...args) => setTimeout(() => connect(...args), 100) + }, + restore () { + // Restore the connection mechanism to normal + network.connect = connect + } + } + + return { transport, addrs, connector } }, - teardown (cb) { - cb() + teardown () { + // Clean up any resources created by setup() } }) }) @@ -69,50 +85,73 @@ describe('compliance', () => { # API -A valid (read: that follows the interface defined) transport, must implement the following API. +A valid transport (one that follows the interface defined) must implement the following API: **Table of contents:** - type: `Transport` - `new Transport([options])` - - `transport.dial(multiaddr, [options, callback])` + - ` transport.dial(multiaddr, [options])` - `transport.createListener([options], handlerFunction)` - type: `transport.Listener` - event: 'listening' - event: 'close' - event: 'connection' - event: 'error' - - `listener.listen(multiaddr, [callback])` - - `listener.getAddrs(callback)` - - `listener.close([options])` + - ` listener.listen(multiaddr)` + - `listener.getAddrs()` + - ` listener.close([options])` ### Creating a transport instance - `JavaScript` - `var transport = new Transport([options])` -Creates a new Transport instance. `options` is a optional JavaScript object, might include the necessary parameters for the transport instance. +Creates a new Transport instance. `options` is an optional JavaScript object that should include the necessary parameters for the transport instance. -**Note: Why is it important to instantiate a transport -** Some transports have state that can be shared between the dialing and listening parts. One example is a libp2p-webrtc-star (or pretty much any other WebRTC flavour transport), where that, in order to dial, a peer needs to be part of some signalling network that is shared also with the listener. +**Note: Why is it important to instantiate a transport -** Some transports have state that can be shared between the dialing and listening parts. For example with libp2p-webrtc-star, in order to dial a peer, the peer must be part of some signaling network that is shared with the listener. ### Dial to another peer -- `JavaScript` - `var conn = transport.dial(multiaddr, [options, callback])` +- `JavaScript` - `const conn = await transport.dial(multiaddr, [options])` -This method dials a transport to the Peer listening on `multiaddr`. +This method uses a transport to dial a Peer listening on `multiaddr`. `multiaddr` must be of the type [`multiaddr`](https://www.npmjs.com/multiaddr). -`stream` must implements the [interface-connection](https://github.com/libp2p/interface-connection) interface. +`[options]` the options that may be passed to the dial. Must support the `signal` option (see below) -`[options]` is an optional argument, which can be used by some implementations +`conn` must implement the [interface-connection](https://github.com/libp2p/interface-connection) interface. -`callback` should follow the `function (err)` signature. +The dial may throw an `Error` instance if there was a problem connecting to the `multiaddr`. -`err` is an `Error` instance to signal that the dial was unsuccessful, this error can be a 'timeout' or simply 'error'. +### Canceling a dial + +Dials may be cancelled using an `AbortController`: + +```Javascript +const AbortController = require('abort-controller') +const { AbortError } = require('interface-transport') +const controller = new AbortController() +try { + const conn = await mytransport.dial(ma, { signal: controller.signal }) + // Do stuff with conn here ... +} catch (err) { + if(err.code === AbortError.code) { + // Dial was aborted, just bail out + return + } + throw err +} + +// ---- +// In some other part of the code: + controller.abort() +// ---- +``` ### Create a listener -- `JavaScript` - `var listener = transport.createListener([options], handlerFunction)` +- `JavaScript` - `const listener = transport.createListener([options], handlerFunction)` This method creates a listener on the transport. @@ -120,37 +159,33 @@ This method creates a listener on the transport. `handlerFunction` is a function called each time a new connection is received. It must follow the following signature: `function (conn) {}`, where `conn` is a connection that follows the [`interface-connection`](https://github.com/diasdavid/interface-connection). -The listener object created, can emit the following events: +The listener object created may emit the following events: -- `listening` - -- `close` - -- `connection` - -- `error` - +- `listening` - when the listener is ready for incoming connections +- `close` - when the listener is closed +- `connection` - (`conn`) each time an incoming connection is received +- `error` - (`err`) each time there is an error on the connection ### Start a listener -- `JavaScript` - `listener.listen(multiaddr, [callback])` +- `JavaScript` - `await listener.listen(multiaddr)` This method puts the listener in `listening` mode, waiting for incoming connections. -`multiaddr` is the address where the listener should bind to. - -`callback` is a function called once the listener is ready. +`multiaddr` is the address that the listener should bind to. ### Get listener addrs -- `JavaScript` - `listener.getAddrs(callback)` +- `JavaScript` - `listener.getAddrs()` -This method retrieves the addresses in which this listener is listening. Useful for when listening on port 0 or any interface (0.0.0.0). +This method returns the addresses on which this listener is listening. Useful when listening on port 0 or any interface (0.0.0.0). ### Stop a listener -- `JavaScript` - `listener.close([options, callback])` +- `JavaScript` - `await listener.close([options])` -This method closes the listener so that no more connections can be open on this transport instance. +This method closes the listener so that no more connections can be opened on this transport instance. -`options` is an optional object that might contain the following properties: +`options` is an optional object that may contain the following properties: - - `timeout` - A timeout value (in ms) that fires and destroys all the connections on this transport if the transport is not able to close graciously. (e.g { timeout: 1000 }) - -`callback` is function that gets called when the listener is closed. It is optional. + - `timeout` - A timeout value (in ms) after which all connections on this transport will be destroyed if the transport is not able to close gracefully. (e.g { timeout: 1000 }) diff --git a/package.json b/package.json index cbc48b2..723903c 100644 --- a/package.json +++ b/package.json @@ -38,11 +38,15 @@ "dirty-chai": "^2.0.1" }, "dependencies": { + "abort-controller": "^3.0.0", + "async-iterator-to-pull-stream": "^1.3.0", "chai": "^4.2.0", + "interface-connection": "~0.3.3", + "it-goodbye": "^2.0.0", + "it-pipe": "^1.0.0", "multiaddr": "^5.0.2", - "pull-goodbye": "~0.0.2", - "pull-serializer": "~0.3.2", - "pull-stream": "^3.6.9" + "pull-stream": "^3.6.9", + "streaming-iterables": "^4.0.2" }, "contributors": [ "David Dias ", diff --git a/src/adapter.js b/src/adapter.js new file mode 100644 index 0000000..e7c87db --- /dev/null +++ b/src/adapter.js @@ -0,0 +1,80 @@ +'use strict' + +const { Connection } = require('interface-connection') +const toPull = require('async-iterator-to-pull-stream') +const error = require('pull-stream/sources/error') +const drain = require('pull-stream/sinks/drain') +const noop = () => {} + +function callbackify (fn) { + return async function (...args) { + let cb = args.pop() + if (typeof cb !== 'function') { + args.push(cb) + cb = noop + } + let res + try { + res = await fn(...args) + } catch (err) { + return cb(err) + } + cb(null, res) + } +} + +// Legacy adapter to old transport & connection interface +class Adapter { + constructor (transport) { + this.transport = transport + } + + dial (ma, options, callback) { + if (typeof options === 'function') { + callback = options + options = {} + } + + callback = callback || noop + + const conn = new Connection() + + this.transport.dial(ma, options) + .then(socket => { + conn.setInnerConn(toPull.duplex(socket)) + conn.getObservedAddrs = callbackify(socket.getObservedAddrs.bind(socket)) + conn.close = callbackify(socket.close.bind(socket)) + callback(null, conn) + }) + .catch(err => { + conn.setInnerConn({ sink: drain(), source: error(err) }) + callback(err) + }) + + return conn + } + + createListener (options, handler) { + if (typeof options === 'function') { + handler = options + options = {} + } + + const server = this.transport.createListener(options, socket => { + const conn = new Connection(toPull.duplex(socket)) + conn.getObservedAddrs = callbackify(socket.getObservedAddrs.bind(socket)) + handler(conn) + }) + + const proxy = { + listen: callbackify(server.listen.bind(server)), + close: callbackify(server.close.bind(server)), + getAddrs: callbackify(server.getAddrs.bind(server)), + getObservedAddrs: callbackify(() => server.getObservedAddrs()) + } + + return new Proxy(server, { get: (_, prop) => proxy[prop] || server[prop] }) + } +} + +module.exports = Adapter diff --git a/src/dial-test.js b/src/dial-test.js index 85c1a6c..35d383b 100644 --- a/src/dial-test.js +++ b/src/dial-test.js @@ -5,69 +5,86 @@ const chai = require('chai') const dirtyChai = require('dirty-chai') const expect = chai.expect chai.use(dirtyChai) -const pull = require('pull-stream') -const goodbye = require('pull-goodbye') -const serializer = require('pull-serializer') + +const goodbye = require('it-goodbye') +const { collect } = require('streaming-iterables') +const pipe = require('it-pipe') +const AbortController = require('abort-controller') +const AbortError = require('./errors').AbortError module.exports = (common) => { describe('dial', () => { let addrs let transport + let connector let listener - before((done) => { - common.setup((err, _transport, _addrs) => { - if (err) return done(err) - transport = _transport - addrs = _addrs - done() - }) + before(async () => { + ({ addrs, transport, connector } = await common.setup()) }) - after((done) => { - common.teardown(done) + after(() => common.teardown && common.teardown()) + + beforeEach(() => { + listener = transport.createListener((conn) => pipe(conn, conn)) + return listener.listen(addrs[0]) }) - beforeEach((done) => { - listener = transport.createListener((conn) => { - pull(conn, conn) - }) - listener.listen(addrs[0], done) + afterEach(() => listener.close()) + + it('simple', async () => { + const conn = await transport.dial(addrs[0]) + + const s = goodbye({ source: ['hey'], sink: collect }) + + const result = await pipe(s, conn, s) + + expect(result.length).to.equal(1) + expect(result[0].toString()).to.equal('hey') }) - afterEach((done) => { - listener.close(done) + it('to non existent listener', async () => { + try { + await transport.dial(addrs[1]) + } catch (_) { + // Success: expected an error to be throw + return + } + expect.fail('Did not throw error attempting to connect to non-existent listener') }) - it('simple', (done) => { - const s = serializer(goodbye({ - source: pull.values(['hey']), - sink: pull.collect((err, values) => { - expect(err).to.not.exist() - expect( - values - ).to.be.eql( - ['hey'] - ) - done() - }) - })) + it('cancel before dialing', async () => { + const controller = new AbortController() + controller.abort() + const socket = transport.dial(addrs[0], { signal: controller.signal }) - pull( - s, - transport.dial(addrs[0]), - s - ) + try { + await socket + } catch (err) { + expect(err.code).to.eql(AbortError.code) + return + } + expect.fail('Did not throw error with code ' + AbortError.code) }) - it('to non existent listener', (done) => { - pull( - transport.dial(addrs[1]), - pull.onEnd((err) => { - expect(err).to.exist() - done() - }) - ) + it('cancel while dialing', async () => { + // Add a delay to connect() so that we can cancel while the dial is in + // progress + connector.delay(100) + + const controller = new AbortController() + const socket = transport.dial(addrs[0], { signal: controller.signal }) + setTimeout(() => controller.abort(), 50) + + try { + await socket + } catch (err) { + expect(err.code).to.eql(AbortError.code) + return + } finally { + connector.restore() + } + expect.fail('Did not throw error with code ' + AbortError.code) }) }) } diff --git a/src/errors.js b/src/errors.js new file mode 100644 index 0000000..32289a5 --- /dev/null +++ b/src/errors.js @@ -0,0 +1,16 @@ +'use strict' + +class AbortError extends Error { + constructor () { + super('AbortError') + this.code = AbortError.code + } + + static get code () { + return 'ABORT_ERR' + } +} + +module.exports = { + AbortError +} diff --git a/src/index.js b/src/index.js index e8173e2..73f1373 100644 --- a/src/index.js +++ b/src/index.js @@ -10,3 +10,6 @@ module.exports = (common) => { listen(common) }) } + +module.exports.AbortError = require('./errors').AbortError +module.exports.Adapter = require('./adapter') diff --git a/src/listen-test.js b/src/listen-test.js index 082361a..8abdbca 100644 --- a/src/listen-test.js +++ b/src/listen-test.js @@ -7,118 +7,98 @@ const dirtyChai = require('dirty-chai') const expect = chai.expect chai.use(dirtyChai) -const pull = require('pull-stream') +const pipe = require('it-pipe') module.exports = (common) => { describe('listen', () => { let addrs let transport - before((done) => { - common.setup((err, _transport, _addrs) => { - if (err) return done(err) - transport = _transport - addrs = _addrs - done() - }) + before(async () => { + ({ transport, addrs } = await common.setup()) }) - after((done) => { - common.teardown(done) - }) + after(() => common.teardown && common.teardown()) - it('simple', (done) => { + it('simple', async () => { const listener = transport.createListener((conn) => {}) - listener.listen(addrs[0], () => { - listener.close(done) - }) + await listener.listen(addrs[0]) + await listener.close() }) - it('close listener with connections, through timeout', (done) => { - const finish = plan(3, done) - const listener = transport.createListener((conn) => { - pull(conn, conn) + it('close listener with connections, through timeout', async () => { + let finish + let done = new Promise((resolve) => { + finish = resolve }) - listener.listen(addrs[0], () => { - const socket1 = transport.dial(addrs[0], () => { - listener.close(finish) - }) + const listener = transport.createListener((conn) => pipe(conn, conn)) - pull( - transport.dial(addrs[0]), - pull.onEnd(() => { - finish() - }) - ) + // Listen + await listener.listen(addrs[0]) - pull( - pull.values([Buffer.from('Some data that is never handled')]), - socket1, - pull.onEnd(() => { - finish() - }) - ) + // Create two connections to the listener + const socket1 = await transport.dial(addrs[0]) + await transport.dial(addrs[0]) + + pipe( + [Buffer.from('Some data that is never handled')], + socket1 + ).then(() => { + finish() }) + + // Closer the listener (will take a couple of seconds to time out) + await listener.close() + + // Pipe should have completed + await done }) describe('events', () => { - // eslint-disable-next-line - // TODO: figure out why it fails in the full test suite - it.skip('connection', (done) => { - const finish = plan(2, done) - + it('connection', (done) => { const listener = transport.createListener() - listener.on('connection', (conn) => { + listener.on('connection', async (conn) => { expect(conn).to.exist() - finish() + await listener.close() + done() }) - listener.listen(addrs[0], () => { - transport.dial(addrs[0], () => { - listener.close(finish) - }) - }) + ;(async () => { + await listener.listen(addrs[0]) + await transport.dial(addrs[0]) + })() }) it('listening', (done) => { const listener = transport.createListener() - listener.on('listening', () => { - listener.close(done) + listener.on('listening', async () => { + await listener.close() + done() }) listener.listen(addrs[0]) }) - // eslint-disable-next-line - // TODO: how to get the listener to emit an error? - it.skip('error', (done) => { + it('error', (done) => { const listener = transport.createListener() - listener.on('error', (err) => { + listener.on('error', async (err) => { expect(err).to.exist() - listener.close(done) + await listener.close() + done() }) + listener.emit('error', new Error('my err')) }) it('close', (done) => { - const finish = plan(2, done) const listener = transport.createListener() - listener.on('close', finish) + listener.on('close', done) - listener.listen(addrs[0], () => { - listener.close(finish) - }) + ;(async () => { + await listener.listen(addrs[0]) + await listener.close() + })() }) }) }) } - -function plan (n, done) { - let i = 0 - return (err) => { - if (err) return done(err) - i++ - - if (i === n) done() - } -} From 4fd37bb616a7e2e72d68af196bfbd1a96fe11e0b Mon Sep 17 00:00:00 2001 From: dirkmc Date: Thu, 18 Apr 2019 18:44:17 +0800 Subject: [PATCH 269/337] feat: add type to AbortError (#45) --- src/dial-test.js | 2 ++ src/errors.js | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/src/dial-test.js b/src/dial-test.js index 35d383b..11b9dea 100644 --- a/src/dial-test.js +++ b/src/dial-test.js @@ -62,6 +62,7 @@ module.exports = (common) => { await socket } catch (err) { expect(err.code).to.eql(AbortError.code) + expect(err.type).to.eql(AbortError.type) return } expect.fail('Did not throw error with code ' + AbortError.code) @@ -80,6 +81,7 @@ module.exports = (common) => { await socket } catch (err) { expect(err.code).to.eql(AbortError.code) + expect(err.type).to.eql(AbortError.type) return } finally { connector.restore() diff --git a/src/errors.js b/src/errors.js index 32289a5..40dd027 100644 --- a/src/errors.js +++ b/src/errors.js @@ -4,11 +4,16 @@ class AbortError extends Error { constructor () { super('AbortError') this.code = AbortError.code + this.type = AbortError.type } static get code () { return 'ABORT_ERR' } + + static get type () { + return 'aborted' + } } module.exports = { From 06ed59dc392fd738c9838c0118e279e3d9c3a164 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Thu, 18 Apr 2019 15:47:47 +0100 Subject: [PATCH 270/337] refactor: a better abort error message (#47) Change to message as described here: https://heycam.github.io/webidl/#aborterror --- src/errors.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/errors.js b/src/errors.js index 40dd027..38609c1 100644 --- a/src/errors.js +++ b/src/errors.js @@ -2,7 +2,7 @@ class AbortError extends Error { constructor () { - super('AbortError') + super('The operation was aborted') this.code = AbortError.code this.type = AbortError.type } From 1dc5baab0b3efdf5ec07be646b8692700eb4c91c Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 19 Apr 2019 10:20:56 +0200 Subject: [PATCH 271/337] feat: make listen take an array of addrs (#46) * feat: make listen take an array of addrs * fix: make error more user friendly --- README.md | 6 +++--- package.json | 6 +++--- src/errors.js | 16 ++++++++++++++-- src/listen-test.js | 33 +++++++++++++++++++++++++++++---- 4 files changed, 49 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index bbe4f05..9e0e44f 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ A valid transport (one that follows the interface defined) must implement the fo - event: 'close' - event: 'connection' - event: 'error' - - ` listener.listen(multiaddr)` + - ` listener.listen(Array)` - `listener.getAddrs()` - ` listener.close([options])` @@ -168,11 +168,11 @@ The listener object created may emit the following events: ### Start a listener -- `JavaScript` - `await listener.listen(multiaddr)` +- `JavaScript` - `await listener.listen(Array)` This method puts the listener in `listening` mode, waiting for incoming connections. -`multiaddr` is the address that the listener should bind to. +`Array` is an array of the addresses that the listener should bind to. ### Get listener addrs diff --git a/package.json b/package.json index 723903c..e6be5fa 100644 --- a/package.json +++ b/package.json @@ -34,17 +34,17 @@ }, "homepage": "https://github.com/libp2p/interface-transport", "devDependencies": { - "aegir": "^17.0.1", - "dirty-chai": "^2.0.1" + "aegir": "^18.2.2" }, "dependencies": { "abort-controller": "^3.0.0", "async-iterator-to-pull-stream": "^1.3.0", "chai": "^4.2.0", + "dirty-chai": "^2.0.1", "interface-connection": "~0.3.3", "it-goodbye": "^2.0.0", "it-pipe": "^1.0.0", - "multiaddr": "^5.0.2", + "multiaddr": "^6.0.6", "pull-stream": "^3.6.9", "streaming-iterables": "^4.0.2" }, diff --git a/src/errors.js b/src/errors.js index 38609c1..74168a9 100644 --- a/src/errors.js +++ b/src/errors.js @@ -16,6 +16,18 @@ class AbortError extends Error { } } -module.exports = { - AbortError +class AllListenersFailedError extends Error { + constructor () { + super('All listeners failed to listen on any addresses, please verify the addresses you provided are correct') + this.code = AllListenersFailedError.code + } + + static get code () { + return 'ERR_ALL_LISTENERS_FAILED' + } +} + +module.exports = { + AbortError, + AllListenersFailedError } diff --git a/src/listen-test.js b/src/listen-test.js index 8abdbca..167abfc 100644 --- a/src/listen-test.js +++ b/src/listen-test.js @@ -8,6 +8,7 @@ const expect = chai.expect chai.use(dirtyChai) const pipe = require('it-pipe') +const { collect } = require('streaming-iterables') module.exports = (common) => { describe('listen', () => { @@ -22,7 +23,31 @@ module.exports = (common) => { it('simple', async () => { const listener = transport.createListener((conn) => {}) - await listener.listen(addrs[0]) + await listener.listen([addrs[0]]) + await listener.close() + }) + + it('listen on multiple addresses', async () => { + // create an echo listener + const listener = transport.createListener((conn) => pipe(conn, conn)) + await listener.listen(addrs.slice(0, 2)) + + // Connect on both addresses + const [socket1, socket2] = await Promise.all([ + transport.dial(addrs[0]), + transport.dial(addrs[1]) + ]) + + const data = Buffer.from('hi there') + const results = await pipe( + [data], // [data] -> socket1 + socket1, // socket1 -> server (echo) -> socket1 -> socket2 + socket2, // socket2 -> server (echo) -> socket2 -> collect + collect + ) + + expect(results).to.eql([data]) + await listener.close() }) @@ -35,7 +60,7 @@ module.exports = (common) => { const listener = transport.createListener((conn) => pipe(conn, conn)) // Listen - await listener.listen(addrs[0]) + await listener.listen([addrs[0]]) // Create two connections to the listener const socket1 = await transport.dial(addrs[0]) @@ -66,7 +91,7 @@ module.exports = (common) => { }) ;(async () => { - await listener.listen(addrs[0]) + await listener.listen([addrs[0]]) await transport.dial(addrs[0]) })() }) @@ -95,7 +120,7 @@ module.exports = (common) => { listener.on('close', done) ;(async () => { - await listener.listen(addrs[0]) + await listener.listen([addrs[0]]) await listener.close() })() }) From 00396d028cfdec4416a26edea3d5767543a56257 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 19 Apr 2019 10:37:43 +0200 Subject: [PATCH 272/337] chore: update contributors --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index e6be5fa..9bb93b0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.3.7", + "version": "0.4.0", "description": "A test suite and interface you can use to implement a transport.", "leadMaintainer": "Jacob Heun ", "repository": { @@ -49,12 +49,14 @@ "streaming-iterables": "^4.0.2" }, "contributors": [ + "Alan Shaw ", "David Dias ", "Friedel Ziegelmayer ", "Jacob Heun ", "João Santos ", "Maciej Krüger ", "Richard Littauer ", + "dirkmc ", "dmitriy ryajov ", "greenkeeperio-bot " ] From 16cba53674ed50ee0eceba267739a9e8de726438 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 19 Apr 2019 10:37:44 +0200 Subject: [PATCH 273/337] chore: release version v0.4.0 --- CHANGELOG.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 516a437..3b7dc02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,24 @@ + +# [0.4.0](https://github.com/libp2p/interface-transport/compare/v0.3.7...v0.4.0) (2019-04-19) + + +### Features + +* add type to AbortError ([#45](https://github.com/libp2p/interface-transport/issues/45)) ([4fd37bb](https://github.com/libp2p/interface-transport/commit/4fd37bb)) +* callbacks -> async / await ([#44](https://github.com/libp2p/interface-transport/issues/44)) ([b30ee5f](https://github.com/libp2p/interface-transport/commit/b30ee5f)) +* make listen take an array of addrs ([#46](https://github.com/libp2p/interface-transport/issues/46)) ([1dc5baa](https://github.com/libp2p/interface-transport/commit/1dc5baa)) + + +### BREAKING CHANGES + +* All places in the API that used callbacks are now replaced with async/await + +* test: add tests for canceling dials + +* feat: Adapter class + + + ## [0.3.7](https://github.com/libp2p/interface-transport/compare/v0.3.6...v0.3.7) (2018-11-29) From 9d5849edcf3121815513685233a685fb52f8aa30 Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Tue, 23 Apr 2019 10:53:13 +0100 Subject: [PATCH 274/337] chore: add discourse badge (#4) --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 978a79d..ddc4bad 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,10 @@ interface-content-routing ===================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) -[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) +[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) +[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) +[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) > A test suite and interface you can use to implement a Content Routing module for libp2p. From 360dcfba12228b62b3205085c374d51cfca774fd Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Tue, 23 Apr 2019 10:56:11 +0100 Subject: [PATCH 275/337] chore: add discourse badge (#7) --- .travis.yml | 38 -------------------------------------- README.md | 8 ++++---- package.json | 2 +- 3 files changed, 5 insertions(+), 43 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 9d678dd..0000000 --- a/.travis.yml +++ /dev/null @@ -1,38 +0,0 @@ -sudo: false -language: node_js - -matrix: - include: - - node_js: 4 - env: CXX=g++-4.8 - - node_js: 6 - env: - - SAUCE=true - - CXX=g++-4.8 - - node_js: stable - env: CXX=g++-4.8 - -# Make sure we have new NPM. -before_install: - - npm install -g npm - -script: - - npm run lint - - npm test - - npm run coverage - - make test - -before_script: - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start - -after_success: - - npm run coverage-publish - -addons: - firefox: 'latest' - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.8 diff --git a/README.md b/README.md index 073adb1..91995a2 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ interface-peer-discovery ======================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) -[![](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io/) -[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) -[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) +[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) +[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) +[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) > A test suite and interface you can use to implement a Peer Discovery module for libp2p. diff --git a/package.json b/package.json index 1b7f8d9..3482b9a 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "homepage": "https://github.com/libp2p/interface-peer-discovery", "dependencies": {}, "devDependencies": { - "aegir": "^10.0.0" + "aegir": "^18.2.2" }, "engines": { "node": ">=4.0.0", From 8101be9d4f28498edae0437c516a8a4b9db89ac2 Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Tue, 23 Apr 2019 10:57:43 +0100 Subject: [PATCH 276/337] chore: add discourse badge (#48) --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9e0e44f..43dbb2d 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,13 @@ interface-transport =================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) -[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) +[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) +[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) +[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) +[![](https://img.shields.io/travis/libp2p/interface-transport.svg?style=flat-square)](https://travis-ci.com/libp2p/interface-transport) +[![Dependency Status](https://david-dm.org/libp2p/interface-transport.svg?style=flat-square)](https://david-dm.org/libp2p/interface-transport) +[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) > A test suite and interface you can use to implement a libp2p transport. A libp2p transport is understood as something that offers a dial and listen interface. From e06af8c4aa2fbc8013edc2a2cbe50c9259336da4 Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Fri, 26 Apr 2019 10:28:13 +0100 Subject: [PATCH 277/337] chore: add discourse badge (#30) --- .travis.yml | 25 ++++++++++++++----------- README.md | 12 ++++++++---- package.json | 2 +- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/.travis.yml b/.travis.yml index dc01dc2..bec3772 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,15 +1,18 @@ -sudo: false language: node_js +cache: npm +stages: + - check -matrix: +node_js: + - '10' + +jobs: include: - - node_js: 8 - - node_js: 10 - - node_js: stable + - stage: check + script: + - npx aegir commitlint --travis + - npx aegir dep-check + - npm run lint -# Make sure we have new NPM. -before_install: - - npm install -g npm - -script: - - npm run lint +notifications: + email: false diff --git a/README.md b/README.md index f8499dc..8c23307 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,14 @@ interface-connection ================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) -[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) -![](https://img.shields.io/badge/npm-%3E%3D3.0.0-orange.svg?style=flat-square) -![](https://img.shields.io/badge/Node.js-%3E%3D4.0.0-orange.svg?style=flat-square) +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) +[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) +[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) +[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) +[![](https://img.shields.io/codecov/c/github/libp2p/interface-connection.svg?style=flat-square)](https://codecov.io/gh/libp2p/interface-connection) +[![](https://img.shields.io/travis/libp2p/interface-connection.svg?style=flat-square)](https://travis-ci.com/libp2p/interface-connection) +[![Dependency Status](https://david-dm.org/libp2p/interface-connection.svg?style=flat-square)](https://david-dm.org/libp2p/interface-connection) +[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) This is a test suite and interface you can use to implement a connection. A connection is understood as something that offers mechanism for writing and reading data, back pressure, half and full duplex streams. This module and test suite were heavily inspired by abstract-blob-store and interface-stream-muxer. diff --git a/package.json b/package.json index aff10a0..30a2859 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "pull-defer": "~0.2.3" }, "devDependencies": { - "aegir": "^17.1.1", + "aegir": "^18.2.2", "timed-tape": "~0.1.1" }, "engines": { From 9b3d3ea62309b885b2c63d741f1bfe68797a64f4 Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Fri, 26 Apr 2019 14:03:14 +0100 Subject: [PATCH 278/337] chore: add discourse badge (#54) --- .travis.yml | 43 +- README.md | 12 +- package-lock.json | 17012 -------------------------------------------- package.json | 6 +- 4 files changed, 24 insertions(+), 17049 deletions(-) delete mode 100644 package-lock.json diff --git a/.travis.yml b/.travis.yml index dee4ba6..bec3772 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,33 +1,18 @@ -sudo: false language: node_js +cache: npm +stages: + - check -matrix: +node_js: + - '10' + +jobs: include: - - node_js: 8 - env: CXX=g++-4.8 - - node_js: 10 - env: CXX=g++-4.8 - - node_js: stable - env: CXX=g++-4.8 + - stage: check + script: + - npx aegir commitlint --travis + - npx aegir dep-check + - npm run lint -# Make sure we have new NPM. -before_install: - - npm install -g npm - -script: - - npm run lint - -before_script: - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start - -after_success: - - npm run coverage-publish - -addons: - firefox: 'latest' - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.8 +notifications: + email: false diff --git a/README.md b/README.md index b00f726..e01d9b0 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,13 @@ interface-stream-muxer ===================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) -[![](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io/) -[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) -[![Travis CI](https://travis-ci.org/ipfs/interface-stream-muxer.svg?branch=master)](https://travis-ci.org/ipfs/interface-stream-muxer) -[![Dependency Status](https://david-dm.org/ipfs/interface-stream-muxer.svg?style=flat-square)](https://david-dm.org/ipfs/interface-stream-muxer) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) +[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) +[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) +[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) +[![](https://img.shields.io/travis/libp2p/interface-stream-muxer.svg?style=flat-square)](https://travis-ci.com/libp2p/interface-stream-muxer) +[![Dependency Status](https://david-dm.org/libp2p/interface-stream-muxer.svg?style=flat-square)](https://david-dm.org/libp2p/interface-stream-muxer) +[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) > A test suite and interface you can use to implement a stream muxer. "A one stop shop for all your muxing needs" diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 6e78313..0000000 --- a/package-lock.json +++ /dev/null @@ -1,17012 +0,0 @@ -{ - "name": "interface-stream-muxer", - "version": "0.5.9", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/cli": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.1.2.tgz", - "integrity": "sha512-K3WDlpBPGpoW11SLKFEBhMsITomPovsrZ/wnM3y+WStbytukDXC0OBic3yQp+j058QUw0+R/jfx2obwp1fOzcA==", - "dev": true, - "requires": { - "chokidar": "^2.0.3", - "commander": "^2.8.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.0.0", - "lodash": "^4.17.10", - "mkdirp": "^0.5.1", - "output-file-sync": "^2.0.0", - "slash": "^2.0.0", - "source-map": "^0.5.0" - } - }, - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/core": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.1.2.tgz", - "integrity": "sha512-IFeSSnjXdhDaoysIlev//UzHZbdEmm7D0EIH2qtse9xK7mXEZQpYjs2P00XlP1qYsYvid79p+Zgg6tz1mp6iVw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.1.2", - "@babel/helpers": "^7.1.2", - "@babel/parser": "^7.1.2", - "@babel/template": "^7.1.2", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.1.2", - "convert-source-map": "^1.1.0", - "debug": "^3.1.0", - "json5": "^0.5.0", - "lodash": "^4.17.10", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.1.5.tgz", - "integrity": "sha512-IO31r62xfMI+wBJVmgx0JR9ZOHty8HkoYpQAjRWUGG9vykBTlGHdArZ8zoFtpUu2gs17K7qTl/TtPpiSi6t+MA==", - "dev": true, - "requires": { - "@babel/types": "^7.1.5", - "jsesc": "^2.5.1", - "lodash": "^4.17.10", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-builder-react-jsx": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz", - "integrity": "sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "esutils": "^2.0.0" - } - }, - "@babel/helper-call-delegate": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz", - "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.0.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-define-map": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", - "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz", - "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz", - "integrity": "sha512-0JZRd2yhawo79Rcm4w0LwSMILFmFXjugG3yqf+P/UsKsRS1mJCmMwwlHDlMg7Avr9LrvSpp4ZSULO9r8jpCzcw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", - "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz", - "integrity": "sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", - "dev": true, - "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-wrap-function": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz", - "integrity": "sha512-R6HU3dete+rwsdAfrOzTlE9Mcpk4RjU3aX3gi9grtmugQY0u79X7eogUvfXA5sI81Mfq1cn6AgxihfN33STjJA==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helpers": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.1.5.tgz", - "integrity": "sha512-2jkcdL02ywNBry1YNFAH/fViq4fXG0vdckHqeJk+75fpQ2OH+Az6076tX/M0835zA45E0Cqa6pV5Kiv9YOqjEg==", - "dev": true, - "requires": { - "@babel/template": "^7.1.2", - "@babel/traverse": "^7.1.5", - "@babel/types": "^7.1.5" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.1.5.tgz", - "integrity": "sha512-WXKf5K5HT6X0kKiCOezJZFljsfxKV1FpU8Tf1A7ZpGvyd/Q4hlrJm2EwoH2onaUq3O4tLDp+4gk0hHPsMyxmOg==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.1.0.tgz", - "integrity": "sha512-Fq803F3Jcxo20MXUSDdmZZXrPe6BWyGcWBPPNB/M7WaUYESKDeKMOGIxEzQOjGSmW/NWb6UaPZrtTB2ekhB/ew==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.0.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.1.0.tgz", - "integrity": "sha512-/PCJWN+CKt5v1xcGn4vnuu13QDoV+P7NcICP44BoonAJoPSGwVkgrXihFIQGiEjjPlUDBIw1cM7wYFLARS2/hw==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0", - "@babel/plugin-syntax-class-properties": "^7.0.0" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.1.2.tgz", - "integrity": "sha512-YooynBO6PmBgHvAd0fl5e5Tq/a0pEC6RqF62ouafme8FzdIVH41Mz/u1dn8fFVm4jzEJ+g/MsOxouwybJPuP8Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/plugin-syntax-decorators": "^7.1.0" - } - }, - "@babel/plugin-proposal-do-expressions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-do-expressions/-/plugin-proposal-do-expressions-7.0.0.tgz", - "integrity": "sha512-fIXsLAsQ5gVhQF44wZ9Yc3EBxaCHzeNjd8z9ivEzKOQyv5VoU1YJQ3AZa0VJgQMX5k/cbXJpNwp2mtg7iSdiGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-do-expressions": "^7.0.0" - } - }, - "@babel/plugin-proposal-export-default-from": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.0.0.tgz", - "integrity": "sha512-cWhkx6SyjZ4caFOanoPmDNgQCuYYTmou4QXy886JsyLTw/vhWQbop2gLKsWyyswrJkKTB7fSNxVYbP/oEsoySA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.0.0.tgz", - "integrity": "sha512-UZuK8lkobh3570vCu0sxDQn+ZlCV6CVLlXe+nNohvPr6/zI5I+j4Ir2fTTCG0ayBQanym0N+29K5+v4c8SATaQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-export-namespace-from": "^7.0.0" - } - }, - "@babel/plugin-proposal-function-bind": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.0.0.tgz", - "integrity": "sha512-CNLspFXoquetQqPTFRedMvF7VYpsY2IecFu7Gcb86w+70lXojIKHhX1QFt5dhyk5n4MsjKrdXlGipbCFqD0Xeg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-function-bind": "^7.0.0" - } - }, - "@babel/plugin-proposal-function-sent": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.1.0.tgz", - "integrity": "sha512-yciM4dketj0pjd1enirzfVWclzSCzjOljHx8E4DJUBq/q65CuaKsX2zhpdImzcn6TtFupzdcuchbqN00IEKDAA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/plugin-syntax-function-sent": "^7.0.0" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz", - "integrity": "sha512-kfVdUkIAGJIVmHmtS/40i/fg/AGnw/rsZBCaapY5yjeO5RA9m165Xbw9KMOu2nqXP5dTFjEjHdfNdoVcHv133Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.0.0" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.0.0.tgz", - "integrity": "sha512-06osaVN0bKEIXvzScf6qPpbDUEP4sixqVdjwpSPPwEtMyDC+x8PDvcJCww6p6TDOTIHnuUx2Afmguf/RypKDIw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.0.0" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.0.0.tgz", - "integrity": "sha512-QIN3UFo1ul4ruAsjIqK43PeXedo1qY74zeGrODJl1KfCGeMc6qJC4rb5Ylml/smzxibqsDeVZGH+TmWHCldRQQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.0.0.tgz", - "integrity": "sha512-m4iDNpbBv2rTxxgViAeaqLOStc2wrlVAC5ifp6pjBPG29F56LdlPgf5CQYzj99y3kYeKqsyf/dcMx/r+QfwMZg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-numeric-separator": "^7.0.0" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz", - "integrity": "sha512-14fhfoPcNu7itSen7Py1iGN0gEm87hX/B+8nZPqkdmANyyYWYMY2pjA3r8WXbWVKMzfnSNS0xY8GVS0IjXi/iw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz", - "integrity": "sha512-JPqAvLG1s13B/AuoBjdBYvn38RqW6n1TzrQO839/sIpqLpbnXKacsAgpZHzLD83Sm8SDXMkkrAvEnJ25+0yIpw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.0.0" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.0.0.tgz", - "integrity": "sha512-7x8HLa71OzNiofbQUVakS0Kmg++6a+cXNfS7QKHbbv03SuSaumJyaWsfNgw+T7aqrJlqurYpZqrkPgXu0iZK0w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0" - } - }, - "@babel/plugin-proposal-pipeline-operator": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-pipeline-operator/-/plugin-proposal-pipeline-operator-7.0.0.tgz", - "integrity": "sha512-MN189PDyTMoor/YFh9dk6HpSZLMGHCXRdAhgmzshwcalbgYh5Mkn7Ib17lOo6fmLwHdyQ4GR4yagizfeR2LwQQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-pipeline-operator": "^7.0.0" - } - }, - "@babel/plugin-proposal-throw-expressions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.0.0.tgz", - "integrity": "sha512-CA2EUiwnbXrsdV4hy3jYghm91WaL7zL7xYfu628dyItRr6gylbRxshghGEK/Hhm//rR58N3PBmEeuYqSW57IUQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-throw-expressions": "^7.0.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0.tgz", - "integrity": "sha512-tM3icA6GhC3ch2SkmSxv7J/hCWKISzwycub6eGsDrFDgukD4dZ/I+x81XgW0YslS6mzNuQ1Cbzh5osjIMgepPQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.2.0" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0.tgz", - "integrity": "sha512-im7ged00ddGKAjcZgewXmp1vxSZQQywuQXe2B1A7kajjZmDeY/ekMPmWr9zJgveSaQH0k7BcGrojQhcK06l0zA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.0.0.tgz", - "integrity": "sha512-cR12g0Qzn4sgkjrbrzWy2GE7m9vMl/sFkqZ3gIpAQdrvPDnLM8180i+ANDFIXfjHo9aqp0ccJlQ0QNZcFUbf9w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.1.0.tgz", - "integrity": "sha512-uQvRSbgQ0nQg3jsmIixXXDCgSpkBolJ9X7NYThMKCcjvE8dN2uWJUzTUNNAeuKOjARTd+wUQV0ztXpgunZYKzQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-do-expressions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-do-expressions/-/plugin-syntax-do-expressions-7.0.0.tgz", - "integrity": "sha512-ZN5MO2WuYfznTK0/TRlF9qG+pBGV/bY5CRO9/a00XEGvaU31JAewRbYaZrySDw6kwSdtPG76yk9jZdPrEC3jWg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0.tgz", - "integrity": "sha512-Gt9xNyRrCHCiyX/ZxDGOcBnlJl0I3IWicpZRC4CdC0P5a/I07Ya2OAMEBU+J7GmRFVmIetqEYRko6QYRuKOESw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-export-default-from": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.0.0.tgz", - "integrity": "sha512-HNnjg/fFFbnuLAqr/Ocp1Y3GB4AjmXcu1xxn3ql3bS2kGrB/qi+Povshb8i3hOkE5jNozzh8r/0/lq1w8oOWbQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.0.0.tgz", - "integrity": "sha512-l314XT1eMa0MWboSmG4BdKukHfSpSpQRenUoZmEpL6hqc5nc1/ddpLETjPB77gZE1dZ9qxy5D3U3UUjjcX2d4g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.0.0.tgz", - "integrity": "sha512-zGcuZWiWWDa5qTZ6iAnpG0fnX/GOu49pGR5PFvkQ9GmKNaSphXQnlNXh/LG20sqWtNrx/eB6krzfEzcwvUyeFA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-function-bind": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.0.0.tgz", - "integrity": "sha512-dGxXCBMhRgdoJdTDouuC5sTRqZihfm4bKTWCJOXpTknZnmb1AozdvoNQA8V1WCccwk0IGKr0LaCbsQDQNp48JA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-function-sent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.0.0.tgz", - "integrity": "sha512-j+D8C+clbieA+1UFlRzMkVozWNLB94TCJsUUE7OCyKBRM329ZZXnFPjgm0em5ddLsKV9DNpdtaOZsNZ1J7gHyA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.0.0.tgz", - "integrity": "sha512-FEoGvhXVAiWzpDjyZIlBGzKyNk/lnRPy7aPke3PjVkiAY0QFsvFfkjUg5diRwVfowBA8SJqvFt0ZoXNSjl70hQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz", - "integrity": "sha512-UlSfNydC+XLj4bw7ijpldc1uZ/HB84vw+U6BTuqMdIEmz/LDe63w/GHtpQMdXWdqQZFeAI9PjnHe/vDhwirhKA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0.tgz", - "integrity": "sha512-PdmL2AoPsCLWxhIr3kG2+F9v4WH06Q3z+NoGVpQgnUNGcagXHq5sB3OXxkSahKq9TLdNMN/AJzFYSOo8UKDMHg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.0.0.tgz", - "integrity": "sha512-eOcVPYWpdReMfxHZIBRjC5wlB8iU7kM6eQyst0kK6SwUPmpYNKyB4rJdf0HTeUEOSRqdlH6uMiLAzReA0qDGLQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.0.0.tgz", - "integrity": "sha512-oAJmMsAvTSIk9y0sZdU2S/nY44PEUuHN7EzNDMgbuR4e/OwyfR9lSmoBJBZ2lslFZIqhksrTt4i+av7uKfNYDw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.0.0.tgz", - "integrity": "sha512-t9RMUPWsFXVeUZxEOhIDkVqYLi1sWOTjxFBAp8wJtaARilvkGlEQvSObd2W5YKicDktINI9XmdV0sB2FZaLOpw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz", - "integrity": "sha512-5A0n4p6bIiVe5OvQPxBnesezsgFJdHhSs3uFSvaPdMqtsovajLZ+G2vZyvNe10EzJBWWo3AcHGKhAFUxqwp2dw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz", - "integrity": "sha512-Wc+HVvwjcq5qBg1w5RG9o9RVzmCaAg/Vp0erHCKpAYV8La6I94o4GQAmFYNmkzoMO6gzoOSulpKeSSz6mPEoZw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.0.0.tgz", - "integrity": "sha512-QXedQsZf8yua1nNrXSePT0TsGSQH9A1iK08m9dhCMdZeJaaxYcQfXdgHWVV6Cp7WE/afPVvSKIsAHK5wP+yxDA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-pipeline-operator": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-pipeline-operator/-/plugin-syntax-pipeline-operator-7.0.0.tgz", - "integrity": "sha512-McK1JV4klGq2r0UZ1SLE2u+u37ElArBcPMGl6JizdgEXD3ttp0dpOB5ZpqpeRHkIgnl46th64UHrFDteQ4P5aw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-throw-expressions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.0.0.tgz", - "integrity": "sha512-/5uORdWlPta/ALhI5zKtm0Y9vAYOa7HJMML0OnCGk9XZA4hpGjb0Xjt/OVDCJVawC/4FrlAGCHOaj9BtWeVDvg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz", - "integrity": "sha512-2EZDBl1WIO/q4DIkIp4s86sdp4ZifL51MoIviLY/gG/mLSuOIEg7J8o6mhbxOTvUJkaN50n+8u41FVsr5KLy/w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.1.0.tgz", - "integrity": "sha512-rNmcmoQ78IrvNCIt/R9U+cixUHeYAzgusTFgIAv+wQb9HJU4szhpDD6e5GCACmj/JP5KxuCwM96bX3L9v4ZN/g==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz", - "integrity": "sha512-AOBiyUp7vYTqz2Jibe1UaAWL0Hl9JUXEgjFvvvcSc9MVDItv46ViXFw2F7SVt1B5k+KWjl44eeXOAk3UDEaJjQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.1.5.tgz", - "integrity": "sha512-jlYcDrz+5ayWC7mxgpn1Wj8zj0mmjCT2w0mPIMSwO926eXBRxpEgoN/uQVRBfjtr8ayjcmS+xk2G1jaP8JjMJQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz", - "integrity": "sha512-rNaqoD+4OCBZjM7VaskladgqnZ1LO6o2UxuWSDzljzW21pN1KXkB7BstAVweZdxQkHAujps5QMNOTWesBciKFg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.1.0", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz", - "integrity": "sha512-ubouZdChNAv4AAWAgU7QKbB93NU5sHwInEWfp+/OzJKA02E6Woh9RVoX4sZrbRwtybky/d7baTUqwFx+HgbvMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.3.tgz", - "integrity": "sha512-Mb9M4DGIOspH1ExHOUnn2UUXFOyVTiX84fXCd+6B5iWrQg/QMeeRmSwpZ9lnjYLSXtZwiw80ytVMr3zue0ucYw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0.tgz", - "integrity": "sha512-00THs8eJxOJUFVx1w8i1MBF4XH4PsAjKjQ1eqN/uCH3YKwP21GCKfrn6YZFZswbOk9+0cw1zGQPHVc1KBlSxig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.1.3" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0.tgz", - "integrity": "sha512-w2vfPkMqRkdxx+C71ATLJG30PpwtTpW7DDdLqYt2acXU7YjztzeWW2Jk1T6hKqCLYCcEA5UQM/+xTAm+QCSnuQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.1.0.tgz", - "integrity": "sha512-uZt9kD1Pp/JubkukOGQml9tqAeI8NkE98oZnHZ2qHRElmeKCodbTZgOEUtujSCSLhHSBWbzNiFSDIMC4/RBTLQ==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.0.0.tgz", - "integrity": "sha512-WhXUNb4It5a19RsgKKbQPrjmy4yWOY1KynpEbNw7bnd1QTcrT/EIl3MJvnGgpgvrKyKbqX7nUNOJfkpLOnoDKA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz", - "integrity": "sha512-TlxKecN20X2tt2UEr2LNE6aqA0oPeMT1Y3cgz8k4Dn1j5ObT8M3nl9aA37LLklx0PBZKETC9ZAf9n/6SujTuXA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.1.0.tgz", - "integrity": "sha512-VxOa1TMlFMtqPW2IDYZQaHsFrq/dDoIjgN098NowhexhZcz3UGlvPgZXuE1jEvNygyWyxRacqDpCZt+par1FNg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz", - "integrity": "sha512-1NTDBWkeNXgpUcyoVFxbr9hS57EpZYXpje92zv0SUzjdu3enaRwF/l3cmyRnXLtIdyJASyiS6PtybK+CgKf7jA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.1.0.tgz", - "integrity": "sha512-wt8P+xQ85rrnGNr2x1iV3DW32W8zrB6ctuBkYBbf5/ZzJY99Ob4MFgsZDFgczNU76iy9PWsy4EuxOliDjdKw6A==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.1.0.tgz", - "integrity": "sha512-wtNwtMjn1XGwM0AXPspQgvmE6msSJP15CX2RVfpTSTNPLhKhaOjaIfBaVfj4iUZ/VrFSodcFedwtPg/NxwQlPA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.1.3.tgz", - "integrity": "sha512-PvTxgjxQAq4pvVUZF3mD5gEtVDuId8NtWkJsZLEJZMZAW3TvgQl1pmydLLN1bM8huHFVVU43lf0uvjQj9FRkKw==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.1.0.tgz", - "integrity": "sha512-enrRtn5TfRhMmbRwm7F8qOj0qEYByqUvTttPEGimcBH4CJHphjyK1Vg7sdU7JjeEmgSpM890IT/efS2nMHwYig==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz", - "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.1.0.tgz", - "integrity": "sha512-/O02Je1CRTSk2SSJaq0xjwQ8hG4zhZGNjE8psTsSNPXyLRCODv7/PBozqT5AmQMzp7MI3ndvMhGdqp9c96tTEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.1.0.tgz", - "integrity": "sha512-vHV7oxkEJ8IHxTfRr3hNGzV446GAb+0hgbA7o/0Jd76s+YzccdWuTU296FOCOl/xweU4t/Ya4g41yWz80RFCRw==", - "dev": true, - "requires": { - "@babel/helper-call-delegate": "^7.1.0", - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz", - "integrity": "sha512-BX8xKuQTO0HzINxT6j/GiCwoJB0AOMs0HmLbEnAvcte8U8rSkNa/eSCAY+l1OA4JnCVq2jw2p6U8QQryy2fTPg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0.tgz", - "integrity": "sha512-0TMP21hXsSUjIQJmu/r7RiVxeFrXRcMUigbKu0BLegJK9PkYodHstaszcig7zxXfaBji2LYUdtqIkHs+hgYkJQ==", - "dev": true, - "requires": { - "@babel/helper-builder-react-jsx": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0" - } - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.0.0.tgz", - "integrity": "sha512-pymy+AK12WO4safW1HmBpwagUQRl9cevNX+82AIAtU1pIdugqcH+nuYP03Ja6B+N4gliAaKWAegIBL/ymALPHA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.0.0.tgz", - "integrity": "sha512-OSeEpFJEH5dw/TtxTg4nijl4nHBbhqbKL94Xo/Y17WKIf2qJWeIk/QeXACF19lG1vMezkxqruwnTjVizaW7u7w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz", - "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==", - "dev": true, - "requires": { - "regenerator-transform": "^0.13.3" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.1.0.tgz", - "integrity": "sha512-WFLMgzu5DLQEah0lKTJzYb14vd6UiES7PTnXcvrPZ1VrwFeJ+mTbvr65fFAsXYMt2bIoOoC0jk76zY1S7HZjUg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "resolve": "^1.8.1", - "semver": "^5.5.1" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz", - "integrity": "sha512-g/99LI4vm5iOf5r1Gdxq5Xmu91zvjhEG5+yZDJW268AZELAu4J1EiFLnkSG3yuUsZyOipVOVUKoGPYwfsTymhw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz", - "integrity": "sha512-L702YFy2EvirrR4shTj0g2xQp7aNwZoWNCkNu2mcoU0uyzMl0XRwDSwzB/xp6DSUFiBmEXuyAyEN16LsgVqGGQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz", - "integrity": "sha512-LFUToxiyS/WD+XEWpkx/XJBrUXKewSZpzX68s+yEOtIbdnsRjpryDw9U06gYc6klYEij/+KQVRnD3nz3AoKmjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz", - "integrity": "sha512-vA6rkTCabRZu7Nbl9DfLZE1imj4tzdWcg5vtdQGvj+OH9itNNB6hxuRMHuIY8SGnEt1T9g5foqs9LnrHzsqEFg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0.tgz", - "integrity": "sha512-1r1X5DO78WnaAIvs5uC48t41LLckxsYklJrZjNKcevyz83sF2l4RHbw29qrCPr/6ksFsdfRpT/ZgxNWHXRnffg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz", - "integrity": "sha512-uJBrJhBOEa3D033P95nPHu3nbFwFE9ZgXsfEitzoIXIwqAZWk7uXcg06yFKXz9FSxBH5ucgU/cYdX0IV8ldHKw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.1.3" - } - }, - "@babel/preset-env": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.1.0.tgz", - "integrity": "sha512-ZLVSynfAoDHB/34A17/JCZbyrzbQj59QC1Anyueb4Bwjh373nVPq5/HMph0z+tCmcDjXDe+DlKQq9ywQuvWrQg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.1.0", - "@babel/plugin-proposal-json-strings": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.0.0", - "@babel/plugin-syntax-async-generators": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.1.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.1.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-dotall-regex": "^7.0.0", - "@babel/plugin-transform-duplicate-keys": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.1.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.1.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-amd": "^7.1.0", - "@babel/plugin-transform-modules-commonjs": "^7.1.0", - "@babel/plugin-transform-modules-systemjs": "^7.0.0", - "@babel/plugin-transform-modules-umd": "^7.1.0", - "@babel/plugin-transform-new-target": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.1.0", - "@babel/plugin-transform-parameters": "^7.1.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typeof-symbol": "^7.0.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "browserslist": "^4.1.0", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.3.0" - } - }, - "@babel/preset-flow": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.0.0.tgz", - "integrity": "sha512-bJOHrYOPqJZCkPVbG1Lot2r5OSsB+iUOaxiHdlOeB1yPWS6evswVHwvkDLZ54WTaTRIk89ds0iHmGZSnxlPejQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0" - } - }, - "@babel/preset-react": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", - "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0" - } - }, - "@babel/preset-stage-0": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/preset-stage-0/-/preset-stage-0-7.0.0.tgz", - "integrity": "sha512-FBMd0IiARPtH5aaOFUVki6evHiJQiY0pFy7fizyRF7dtwc+el3nwpzvhb9qBNzceG1OIJModG1xpE0DDFjPXwA==", - "dev": true - }, - "@babel/register": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.0.0.tgz", - "integrity": "sha512-f/+CRmaCe7rVEvcvPvxeA8j5aJhHC3aJie7YuqcMDhUOuyWLA7J/aNrTaHIzoWPEhpHA54mec4Mm8fv8KBlv3g==", - "dev": true, - "requires": { - "core-js": "^2.5.7", - "find-cache-dir": "^1.0.0", - "home-or-tmp": "^3.0.0", - "lodash": "^4.17.10", - "mkdirp": "^0.5.1", - "pirates": "^4.0.0", - "source-map-support": "^0.5.9" - } - }, - "@babel/runtime": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.2.tgz", - "integrity": "sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "@babel/template": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.1.2.tgz", - "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.1.2", - "@babel/types": "^7.1.2" - } - }, - "@babel/traverse": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.5.tgz", - "integrity": "sha512-eU6XokWypl0MVJo+MTSPUtlfPePkrqsF26O+l1qFGlCKWwmiYAYy2Sy44Qw8m2u/LbPCsxYt90rghmqhYMGpPA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.1.5", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.1.5", - "@babel/types": "^7.1.5", - "debug": "^3.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.10" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.5.tgz", - "integrity": "sha512-sJeqa/d9eM/bax8Ivg+fXF7FpN3E/ZmTrWbkk6r+g7biVYfALMnLin4dKijsaqEhpd2xvOGfQTkQkD31YCVV4A==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.10", - "to-fast-properties": "^2.0.0" - } - }, - "@commitlint/config-conventional": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-7.1.2.tgz", - "integrity": "sha512-DmA4ixkpv03qA1TVs1Bl25QsVym2bPL6pKapesALWIVggG3OpwqGZ55vN75Tx8xZoG7LFKrVyrt7kwhA7X8njQ==", - "dev": true - }, - "@commitlint/ensure": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-7.2.0.tgz", - "integrity": "sha512-j2AJE4eDeLP6O/Z1CdPwEXAzcrRRoeeHLuvW8bldQ4J2nHiX9hzmSe87H87Ob8Avm+zIegsqVPGaBAtRmbODYw==", - "dev": true, - "requires": { - "lodash.camelcase": "4.3.0", - "lodash.kebabcase": "4.1.1", - "lodash.snakecase": "4.1.1", - "lodash.startcase": "4.4.0", - "lodash.upperfirst": "4.3.1" - } - }, - "@commitlint/execute-rule": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-7.1.2.tgz", - "integrity": "sha512-EP/SqX2U2L4AQHglZ2vGM1pvHJOh3sbYtHn1QhtllqEpsdmhuNpVPSGHP/r9OD2h4i90vtnWgZQoskt2MkbknA==", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "@commitlint/is-ignored": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-7.2.1.tgz", - "integrity": "sha512-3DsEEKRnj8Bv9qImsxWcGf9BwerDnk5Vs+oK6ELzIwkndHaAZLHyATjmaz/rsc+U+DWiVjgKrrw3xvd/UsoazA==", - "dev": true, - "requires": { - "semver": "5.6.0" - } - }, - "@commitlint/lint": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-7.2.1.tgz", - "integrity": "sha512-rM7nUyNUJyuKw1MTwJG/wk4twB5YCAG2wzJMn5NqVpGD/qmLOzlZoBl0+CYmuOsbIRAA2rlEV6KZHBk9tTfAdQ==", - "dev": true, - "requires": { - "@commitlint/is-ignored": "^7.2.1", - "@commitlint/parse": "^7.1.2", - "@commitlint/rules": "^7.2.0", - "babel-runtime": "^6.23.0", - "lodash.topairs": "4.3.0" - } - }, - "@commitlint/load": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-7.2.1.tgz", - "integrity": "sha512-FnfmfhPGJqGwILVRznduBejOicNey6p/byfcyxtcBkN2+X96gDuNtqcnGcngCrzPIAgaIrQQcTQDA1/KMtW21A==", - "dev": true, - "requires": { - "@commitlint/execute-rule": "^7.1.2", - "@commitlint/resolve-extends": "^7.1.2", - "babel-runtime": "^6.23.0", - "cosmiconfig": "^4.0.0", - "lodash.merge": "4.6.1", - "lodash.mergewith": "4.6.1", - "lodash.pick": "4.4.0", - "lodash.topairs": "4.3.0", - "resolve-from": "4.0.0" - } - }, - "@commitlint/message": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-7.1.2.tgz", - "integrity": "sha512-6FQeK5LAs1Bde6W/jULg+I/XZhj3gbqCWlS2Q11A2JbaTRpRJZzm7WdD9nK3I0+De41EOqW2t4mBnrpio3o1Zg==", - "dev": true - }, - "@commitlint/parse": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-7.1.2.tgz", - "integrity": "sha512-wrdLwJZL3cs89MfgPtnbbKByijUo3Wrug55aTke5k/F0XNxGaDaNJyH4QXgidgXk57r2t4NJVAKwjnY4wjfNwg==", - "dev": true, - "requires": { - "conventional-changelog-angular": "^1.3.3", - "conventional-commits-parser": "^2.1.0" - } - }, - "@commitlint/read": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-7.1.2.tgz", - "integrity": "sha512-sarYQgfTay2Eu7onHz53EYyRw7pI5QmLE7tP5Ri9op6eu4LadjSoA/4dfc+VE7avsq21J2ewSbz+9f0uvhDxgg==", - "dev": true, - "requires": { - "@commitlint/top-level": "^7.1.2", - "@marionebl/sander": "^0.6.0", - "babel-runtime": "^6.23.0", - "git-raw-commits": "^1.3.0" - } - }, - "@commitlint/resolve-extends": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-7.1.2.tgz", - "integrity": "sha512-zwbifMB9DeHP4sYQdrkx+XJh5Q1lyP/OdlErUCC34NV4Lkxw/XxXF4St3e+y1X28/SgrEc2XSOS6n/vQQfUlLA==", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "lodash.merge": "4.6.1", - "lodash.omit": "4.5.0", - "require-uncached": "^1.0.3", - "resolve-from": "^4.0.0", - "resolve-global": "^0.1.0" - } - }, - "@commitlint/rules": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-7.2.0.tgz", - "integrity": "sha512-c15Q9H5iYE9fnncLnFnMuvPLYA/i0pve5moV0uxJJGr4GgJoBKyldd4CCDhoE80C1k8ABuqr2o2qsopzVEp3Ww==", - "dev": true, - "requires": { - "@commitlint/ensure": "^7.2.0", - "@commitlint/message": "^7.1.2", - "@commitlint/to-lines": "^7.1.2", - "babel-runtime": "^6.23.0" - } - }, - "@commitlint/to-lines": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-7.1.2.tgz", - "integrity": "sha512-Nz3qZwrIEYiN9v/ThJqXAwu4X5+hvT9H8yRPHfjc538R8WhwEfhvym7/4YznDHSvWrQgwqtNPdrb6b2OSBsHmg==", - "dev": true - }, - "@commitlint/top-level": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-7.1.2.tgz", - "integrity": "sha512-YKugOAKy3hgM/ITezPp7Ns51U3xoJfuOsVnMGW4oDcHLhuQ/Qd58ROv/Hgedtk8HugKX3DdZ8XoEnRG70RDGqQ==", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, - "@marionebl/sander": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@marionebl/sander/-/sander-0.6.1.tgz", - "integrity": "sha1-GViWWHTyS8Ub5Ih1/rUNZC/EH3s=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.3", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.2" - } - }, - "@samverschueren/stream-to-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", - "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", - "dev": true, - "requires": { - "any-observable": "^0.3.0" - } - }, - "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", - "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", - "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", - "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", - "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", - "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.7.11" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", - "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", - "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", - "dev": true - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", - "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", - "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", - "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", - "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.1" - } - }, - "@webassemblyjs/utf8": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", - "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", - "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/helper-wasm-section": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-opt": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "@webassemblyjs/wast-printer": "1.7.11" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", - "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", - "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", - "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", - "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/floating-point-hex-parser": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-code-frame": "1.7.11", - "@webassemblyjs/helper-fsm": "1.7.11", - "@xtuc/long": "4.2.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", - "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11", - "@xtuc/long": "4.2.1" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", - "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", - "dev": true - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - }, - "acorn-dynamic-import": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", - "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", - "dev": true, - "requires": { - "acorn": "^5.0.0" - } - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "aegir": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/aegir/-/aegir-17.0.1.tgz", - "integrity": "sha512-g5zIVUSJ89oJty7kqktfSvtX0U4Nv+kPxitW7tzRteqPLC8UZ91Qbqs5HxAog4tC13CtKg/Odg84ylwEWAatcw==", - "dev": true, - "requires": { - "@babel/cli": "7.1.2", - "@babel/core": "7.1.2", - "@babel/plugin-transform-regenerator": "7.0.0", - "@babel/plugin-transform-runtime": "7.1.0", - "@babel/preset-env": "7.1.0", - "@babel/register": "7.0.0", - "@babel/runtime": "7.1.2", - "@commitlint/config-conventional": "^7.1.2", - "@commitlint/lint": "^7.2.1", - "@commitlint/load": "^7.2.1", - "@commitlint/read": "^7.1.2", - "arrify": "^1.0.1", - "async": "^2.6.1", - "babel-loader": "8.0.4", - "babel-plugin-transform-flow-comments": "^6.22.0", - "browserify-zlib": "~0.2.0", - "chalk": "^2.4.1", - "clean-documentation-theme": "~0.5.2", - "codecov": "^3.1.0", - "conventional-changelog": "^1.1.7", - "conventional-github-releaser": "^2.0.0", - "del": "^3.0.0", - "detect-node": "^2.0.4", - "documentation": "^9.0.0-alpha.1", - "es6-promisify": "^6.0.1", - "eslint": "^4.19.0", - "eslint-config-standard": "^11.0.0", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-node": "^6.0.1", - "eslint-plugin-promise": "^3.8.0", - "eslint-plugin-standard": "^3.1.0", - "execa": "^1.0.0", - "filesize": "^3.6.1", - "findup-sync": "^2.0.0", - "fs-extra": "^7.0.0", - "gh-pages": "^2.0.1", - "git-validate": "^2.2.4", - "glob": "^7.1.3", - "joi": "^14.0.1", - "json-loader": "~0.5.7", - "karma": "^3.1.1", - "karma-chrome-launcher": "^2.2.0", - "karma-cli": "^1.0.1", - "karma-edge-launcher": "~0.4.2", - "karma-firefox-launcher": "^1.1.0", - "karma-junit-reporter": "^1.2.0", - "karma-mocha": "^1.3.0", - "karma-mocha-own-reporter": "git+https://github.com/dryajov/karma-mocha-own-reporter.git#d562a92a12d5c76469a05d67cee19bcb8db22b23", - "karma-mocha-webworker": "^1.3.0", - "karma-sourcemap-loader": "~0.3.7", - "karma-webpack": "v4.0.0-beta.0", - "listr": "~0.14.2", - "listr-verbose-renderer": "~0.4.1", - "lodash": "^4.17.11", - "mocha": "^5.2.0", - "mocha-jenkins-reporter": "~0.4.1", - "npm-which": "^3.0.1", - "nyc": "^13.1.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "pretty-hrtime": "^1.0.3", - "prompt-promise": "^1.0.3", - "read-pkg-up": "^4.0.0", - "resolve-bin": "~0.4.0", - "rimraf": "^2.6.2", - "semver": "^5.6.0", - "simple-git": "^1.105.0", - "stats-webpack-plugin": "~0.7.0", - "stream-http": "^3.0.0", - "through": "^2.3.8", - "transform-loader": "~0.2.4", - "uglify-es": "^3.3.9", - "update-notifier": "^2.5.0", - "webpack": "^4.23.1", - "webpack-bundle-analyzer": "^3.0.3", - "webpack-cli": "^3.1.2", - "webpack-merge": "^4.1.4", - "yargs": "^12.0.2", - "yargs-parser": "^11.0.0" - }, - "dependencies": { - "karma-cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-1.0.1.tgz", - "integrity": "sha1-rmw8WKMTodALRRZMRVubhs4X+WA=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - } - } - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "ajv": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", - "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "ansi-colors": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.1.tgz", - "integrity": "sha512-Xt+zb6nqgvV9SWAVp0EG3lRsHcbq5DDgqjPPz6pwgtj6RKz65zGXMNa82oJfOSBA/to6GmRP7Dr+6o+kbApTzQ==", - "dev": true - }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", - "dev": true, - "requires": { - "buffer-equal": "^1.0.0" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - } - } - }, - "argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", - "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", - "dev": true - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-find": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", - "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", - "dev": true - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "requires": { - "lodash": "^4.17.10" - } - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "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" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - }, - "dependencies": { - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - } - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - } - } - }, - "babel-helper-bindify-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", - "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, - "requires": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-builder-react-jsx": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", - "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "esutils": "^2.0.2" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-explode-class": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", - "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", - "dev": true, - "requires": { - "babel-helper-bindify-decorators": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-loader": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.4.tgz", - "integrity": "sha512-fhBhNkUToJcW9nV46v8w87AJOwAJDz84c1CL57n3Stj73FANM/b9TbCUK4YhdOwEyZ+OxhYpdeZDNzSI29Firw==", - "dev": true, - "requires": { - "find-cache-dir": "^1.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "util.promisify": "^1.0.0" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-async-generators": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", - "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", - "dev": true - }, - "babel-plugin-syntax-class-constructor-call": { - "version": "6.18.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", - "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", - "dev": true - }, - "babel-plugin-syntax-class-properties": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", - "dev": true - }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", - "dev": true - }, - "babel-plugin-syntax-do-expressions": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz", - "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=", - "dev": true - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-export-extensions": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", - "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", - "dev": true - }, - "babel-plugin-syntax-flow": { - "version": "6.18.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", - "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", - "dev": true - }, - "babel-plugin-syntax-function-bind": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz", - "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=", - "dev": true - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-system-import-transformer": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-system-import-transformer/-/babel-plugin-system-import-transformer-3.1.0.tgz", - "integrity": "sha1-038Mro5h7zkGAggzHZMbXmMNfF8=", - "dev": true, - "requires": { - "babel-plugin-syntax-dynamic-import": "^6.18.0" - } - }, - "babel-plugin-transform-async-generator-functions": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", - "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-generators": "^6.5.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-class-constructor-call": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", - "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", - "dev": true, - "requires": { - "babel-plugin-syntax-class-constructor-call": "^6.18.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-class-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", - "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-plugin-syntax-class-properties": "^6.8.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", - "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", - "dev": true, - "requires": { - "babel-helper-explode-class": "^6.24.1", - "babel-plugin-syntax-decorators": "^6.13.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-decorators-legacy": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz", - "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==", - "dev": true, - "requires": { - "babel-plugin-syntax-decorators": "^6.1.18", - "babel-runtime": "^6.2.0", - "babel-template": "^6.3.0" - } - }, - "babel-plugin-transform-do-expressions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz", - "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", - "dev": true, - "requires": { - "babel-plugin-syntax-do-expressions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - } - } - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-export-extensions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", - "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", - "dev": true, - "requires": { - "babel-plugin-syntax-export-extensions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-flow-comments": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-comments/-/babel-plugin-transform-flow-comments-6.22.0.tgz", - "integrity": "sha1-jZSREy8rSKvQZW+Wwg87vW/BdSk=", - "dev": true, - "requires": { - "babel-plugin-syntax-flow": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-flow-strip-types": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", - "dev": true, - "requires": { - "babel-plugin-syntax-flow": "^6.18.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-function-bind": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz", - "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", - "dev": true, - "requires": { - "babel-plugin-syntax-function-bind": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-inline-imports-commonjs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-imports-commonjs/-/babel-plugin-transform-inline-imports-commonjs-1.2.0.tgz", - "integrity": "sha1-IMfRkrr8VMhyc4bjOH2O5O8Z5qU=", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "^6.8.0", - "builtin-modules": "^1.1.1" - } - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" - } - }, - "babel-plugin-transform-react-display-name": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", - "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-react-jsx": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", - "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", - "dev": true, - "requires": { - "babel-helper-builder-react-jsx": "^6.24.1", - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-react-jsx-self": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", - "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", - "dev": true, - "requires": { - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-react-jsx-source": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", - "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", - "dev": true, - "requires": { - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "^0.10.0" - }, - "dependencies": { - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - } - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-preset-env": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", - "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" - }, - "dependencies": { - "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - } - } - } - }, - "babel-preset-flow": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", - "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", - "dev": true, - "requires": { - "babel-plugin-transform-flow-strip-types": "^6.22.0" - } - }, - "babel-preset-react": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", - "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", - "dev": true, - "requires": { - "babel-plugin-syntax-jsx": "^6.3.13", - "babel-plugin-transform-react-display-name": "^6.23.0", - "babel-plugin-transform-react-jsx": "^6.24.1", - "babel-plugin-transform-react-jsx-self": "^6.22.0", - "babel-plugin-transform-react-jsx-source": "^6.22.0", - "babel-preset-flow": "^6.23.0" - } - }, - "babel-preset-stage-0": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz", - "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", - "dev": true, - "requires": { - "babel-plugin-transform-do-expressions": "^6.22.0", - "babel-plugin-transform-function-bind": "^6.22.0", - "babel-preset-stage-1": "^6.24.1" - } - }, - "babel-preset-stage-1": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", - "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", - "dev": true, - "requires": { - "babel-plugin-transform-class-constructor-call": "^6.24.1", - "babel-plugin-transform-export-extensions": "^6.22.0", - "babel-preset-stage-2": "^6.24.1" - } - }, - "babel-preset-stage-2": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", - "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", - "dev": true, - "requires": { - "babel-plugin-syntax-dynamic-import": "^6.18.0", - "babel-plugin-transform-class-properties": "^6.24.1", - "babel-plugin-transform-decorators": "^6.24.1", - "babel-preset-stage-3": "^6.24.1" - } - }, - "babel-preset-stage-3": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", - "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", - "dev": true, - "requires": { - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-generator-functions": "^6.24.1", - "babel-plugin-transform-async-to-generator": "^6.24.1", - "babel-plugin-transform-exponentiation-operator": "^6.24.1", - "babel-plugin-transform-object-rest-spread": "^6.22.0" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - }, - "dependencies": { - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - }, - "dependencies": { - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - } - } - }, - "babelify": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/babelify/-/babelify-8.0.0.tgz", - "integrity": "sha512-xVr63fKEvMWUrrIbqlHYsMcc5Zdw4FSVesAHgkgajyCE1W8gbm9rbMakqavhxKvikGYMhEcqxTwB/gQmQ6lBtw==", - "dev": true - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "bail": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", - "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base-x": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.5.tgz", - "integrity": "sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true - }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, - "bfj": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz", - "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.1", - "check-types": "^7.3.0", - "hoopy": "^0.1.2", - "tryer": "^1.0.0" - } - }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", - "dev": true - }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "body": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", - "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", - "dev": true, - "requires": { - "continuable-cache": "^0.3.1", - "error": "^7.0.0", - "raw-body": "~1.1.0", - "safe-json-parse": "~1.0.1" - } - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - } - } - }, - "bowser": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz", - "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==", - "dev": true - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "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": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "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": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.4.tgz", - "integrity": "sha512-u5iz+ijIMUlmV8blX82VGFrB9ecnUg5qEt55CMZ/YJEhha+d8qpBfOFuutJ6F/VKRXjZoD33b6uvarpPxcl3RA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000899", - "electron-to-chromium": "^1.3.82", - "node-releases": "^1.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "requires": { - "base-x": "^3.0.2" - } - }, - "buffer": { - "version": "4.9.1", - "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", - "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", - "dev": true - }, - "cacache": { - "version": "10.0.4", - "resolved": "http://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", - "dev": true, - "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" - }, - "dependencies": { - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", - "dev": true, - "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - } - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "query-string": { - "version": "5.1.1", - "resolved": "http://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - } - } - }, - "cached-path-relative": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", - "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", - "dev": true - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" - } - }, - "caniuse-lite": { - "version": "1.0.30000907", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000907.tgz", - "integrity": "sha512-No5sQ/OB2Nmka8MNOOM6nJx+Hxt6MQ6h7t7kgJFu9oTuwjykyKRSBP/+i/QAyFHxeHB+ddE0Da1CG5ihx9oehQ==", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "ccount": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz", - "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==", - "dev": true - }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } - }, - "chai-checkmark": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chai-checkmark/-/chai-checkmark-1.0.1.tgz", - "integrity": "sha1-n7s8mtkQHwl+8ogyjTD0In10//s=" - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "character-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", - "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==", - "dev": true - }, - "character-entities-html4": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz", - "integrity": "sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==", - "dev": true - }, - "character-entities-legacy": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", - "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==", - "dev": true - }, - "character-reference-invalid": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", - "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==", - "dev": true - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" - }, - "check-types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", - "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==", - "dev": true - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", - "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "class-is": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-documentation-theme": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/clean-documentation-theme/-/clean-documentation-theme-0.5.2.tgz", - "integrity": "sha512-I57pY8V/TM76QsWDu6y+cb2GqyrRW3L9VLfMTHQaXqbmuqn2Jslf4mJc5di9GkOnLYErvCJnD1g69XRS69yN4g==", - "dev": true, - "requires": { - "babel-plugin-transform-inline-imports-commonjs": "^1.2.0", - "concat-stream": "^1.6.0", - "documentation": "^5.3.0", - "documentation-theme-utils": "^3.0.0", - "github-slugger": "^1.1.3", - "highlight.js": "^9.12.0", - "lodash": "^4.17.4", - "prop-types": "^15.5.10", - "radium": "^0.19.4", - "radium-bootstrap-grid": "^0.1.8", - "react": "^15.6.1", - "react-dom": "^15.6.1", - "react-icons": "^2.2.5", - "react-pure-render": "^1.0.2", - "vinyl": "^2.1.0", - "vinyl-fs": "^2.4.4" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "documentation": { - "version": "5.5.0", - "resolved": "http://registry.npmjs.org/documentation/-/documentation-5.5.0.tgz", - "integrity": "sha512-Aod3HOI+8zMhwWztDlECRsDfJ8SFu4oADvipOLq3gnWKy4Cpg2oF5AWT+U6PcX85KuguDI6c+q+2YwYEx99B/A==", - "dev": true, - "requires": { - "ansi-html": "^0.0.7", - "babel-core": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-plugin-system-import-transformer": "3.1.0", - "babel-plugin-transform-decorators-legacy": "^1.3.4", - "babel-preset-env": "^1.6.1", - "babel-preset-react": "^6.24.1", - "babel-preset-stage-0": "^6.24.1", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babelify": "^8.0.0", - "babylon": "^6.18.0", - "chalk": "^2.3.0", - "chokidar": "^2.0.0", - "concat-stream": "^1.6.0", - "disparity": "^2.0.0", - "doctrine-temporary-fork": "2.0.0-alpha-allowarrayindex", - "get-port": "^3.2.0", - "git-url-parse": "^8.0.0", - "github-slugger": "1.2.0", - "glob": "^7.1.2", - "globals-docs": "^2.4.0", - "highlight.js": "^9.12.0", - "js-yaml": "^3.10.0", - "lodash": "^4.17.4", - "mdast-util-inject": "^1.1.0", - "micromatch": "^3.1.5", - "mime": "^1.4.1", - "module-deps-sortable": "4.0.6", - "parse-filepath": "^1.0.2", - "pify": "^3.0.0", - "read-pkg-up": "^3.0.0", - "remark": "^9.0.0", - "remark-html": "7.0.0", - "remark-reference-links": "^4.0.1", - "remark-toc": "^5.0.0", - "remote-origin-url": "0.4.0", - "shelljs": "^0.8.1", - "stream-array": "^1.1.2", - "strip-json-comments": "^2.0.1", - "tiny-lr": "^1.1.0", - "unist-builder": "^1.0.2", - "unist-util-visit": "^1.3.0", - "vfile": "^2.3.0", - "vfile-reporter": "^4.0.0", - "vfile-sort": "^2.1.0", - "vinyl": "^2.1.0", - "vinyl-fs": "^3.0.2", - "yargs": "^9.0.1" - }, - "dependencies": { - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - } - } - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "yargs": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", - "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" - }, - "dependencies": { - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - } - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "dev": true, - "requires": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - }, - "dependencies": { - "slice-ansi": { - "version": "0.0.4", - "resolved": "http://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - } - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", - "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "codecov": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.1.0.tgz", - "integrity": "sha512-aWQc/rtHbcWEQLka6WmBAOpV58J2TwyXqlpAQGhQaSiEUoigTTUk6lLd2vB3kXkhnDyzyH74RXfmV4dq2txmdA==", - "dev": true, - "requires": { - "argv": "^0.0.2", - "ignore-walk": "^3.0.1", - "js-yaml": "^3.12.0", - "request": "^2.87.0", - "urlgrey": "^0.4.4" - } - }, - "collapse-white-space": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", - "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colors": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz", - "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==", - "dev": true - }, - "combine-lists": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true, - "requires": { - "lodash": "^4.5.0" - } - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "comma-separated-tokens": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.5.tgz", - "integrity": "sha512-Cg90/fcK93n0ecgYTAz1jaA3zvnQ0ExlmKY1rdbyHqAx6BHxwoJc+J7HDu0iuQ7ixEs1qaa+WyQ6oeuBpYP1iA==", - "dev": true, - "requires": { - "trim": "0.0.1" - } - }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "compare-func": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", - "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^3.0.0" - } - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - } - } - }, - "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", - "utils-merge": "1.0.1" - } - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "continuable-cache": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", - "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", - "dev": true - }, - "conventional-changelog": { - "version": "1.1.24", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.24.tgz", - "integrity": "sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==", - "dev": true, - "requires": { - "conventional-changelog-angular": "^1.6.6", - "conventional-changelog-atom": "^0.2.8", - "conventional-changelog-codemirror": "^0.3.8", - "conventional-changelog-core": "^2.0.11", - "conventional-changelog-ember": "^0.3.12", - "conventional-changelog-eslint": "^1.0.9", - "conventional-changelog-express": "^0.3.6", - "conventional-changelog-jquery": "^0.1.0", - "conventional-changelog-jscs": "^0.1.0", - "conventional-changelog-jshint": "^0.3.8", - "conventional-changelog-preset-loader": "^1.1.8" - } - }, - "conventional-changelog-angular": { - "version": "1.6.6", - "resolved": "http://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz", - "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==", - "dev": true, - "requires": { - "compare-func": "^1.3.1", - "q": "^1.5.1" - } - }, - "conventional-changelog-atom": { - "version": "0.2.8", - "resolved": "http://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz", - "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-codemirror": { - "version": "0.3.8", - "resolved": "http://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz", - "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-core": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz", - "integrity": "sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==", - "dev": true, - "requires": { - "conventional-changelog-writer": "^3.0.9", - "conventional-commits-parser": "^2.1.7", - "dateformat": "^3.0.0", - "get-pkg-repo": "^1.0.0", - "git-raw-commits": "^1.3.6", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^1.3.6", - "lodash": "^4.2.1", - "normalize-package-data": "^2.3.5", - "q": "^1.5.1", - "read-pkg": "^1.1.0", - "read-pkg-up": "^1.0.1", - "through2": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, - "conventional-changelog-ember": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz", - "integrity": "sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-eslint": { - "version": "1.0.9", - "resolved": "http://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz", - "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-express": { - "version": "0.3.6", - "resolved": "http://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz", - "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-jquery": { - "version": "0.1.0", - "resolved": "http://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", - "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=", - "dev": true, - "requires": { - "q": "^1.4.1" - } - }, - "conventional-changelog-jscs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz", - "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=", - "dev": true, - "requires": { - "q": "^1.4.1" - } - }, - "conventional-changelog-jshint": { - "version": "0.3.8", - "resolved": "http://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz", - "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==", - "dev": true, - "requires": { - "compare-func": "^1.3.1", - "q": "^1.5.1" - } - }, - "conventional-changelog-preset-loader": { - "version": "1.1.8", - "resolved": "http://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz", - "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==", - "dev": true - }, - "conventional-changelog-writer": { - "version": "3.0.9", - "resolved": "http://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz", - "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==", - "dev": true, - "requires": { - "compare-func": "^1.3.1", - "conventional-commits-filter": "^1.1.6", - "dateformat": "^3.0.0", - "handlebars": "^4.0.2", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.2.1", - "meow": "^4.0.0", - "semver": "^5.5.0", - "split": "^1.0.0", - "through2": "^2.0.0" - } - }, - "conventional-commits-filter": { - "version": "1.1.6", - "resolved": "http://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz", - "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==", - "dev": true, - "requires": { - "is-subset": "^0.1.1", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "2.1.7", - "resolved": "http://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz", - "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==", - "dev": true, - "requires": { - "JSONStream": "^1.0.4", - "is-text-path": "^1.0.0", - "lodash": "^4.2.1", - "meow": "^4.0.0", - "split2": "^2.0.0", - "through2": "^2.0.0", - "trim-off-newlines": "^1.0.0" - } - }, - "conventional-github-releaser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/conventional-github-releaser/-/conventional-github-releaser-2.0.2.tgz", - "integrity": "sha512-31dt3fbsl1nS8oODerFbUu+vY0rp99l3U+WscK4+FD5Gl9VzHuplOz1L5dFpvM3ffchxmOIaPxmrtViQbhGU+w==", - "dev": true, - "requires": { - "conventional-changelog": "^1.1.0", - "dateformat": "^3.0.0", - "gh-got": "^6.0.0", - "git-semver-tags": "^1.0.0", - "lodash.merge": "^4.0.2", - "meow": "^4.0.0", - "object-assign": "^4.0.1", - "q": "^1.4.1", - "semver": "^5.0.1", - "semver-regex": "^1.0.0", - "through2": "^2.0.0" - } - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", - "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", - "dev": true, - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0", - "require-from-string": "^2.0.1" - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "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" - } - }, - "create-react-class": { - "version": "15.6.3", - "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", - "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", - "dev": true, - "requires": { - "fbjs": "^0.8.9", - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "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" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true - }, - "dargs": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", - "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "date-fns": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", - "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", - "dev": true - }, - "date-format": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", - "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", - "dev": true - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true - }, - "de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - } - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - }, - "dependencies": { - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detab": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.1.tgz", - "integrity": "sha512-/hhdqdQc5thGrqzjyO/pz76lDZ5GSuAs6goxOaKTsvPk7HNnzAyFN5lyHgqpX4/s1i66K8qMGj+VhA9504x7DQ==", - "dev": true, - "requires": { - "repeat-string": "^1.5.4" - } - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" - }, - "detective": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", - "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", - "dev": true, - "requires": { - "acorn": "^5.2.1", - "defined": "^1.0.0" - } - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "disparity": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/disparity/-/disparity-2.0.0.tgz", - "integrity": "sha1-V92stHMkrl9Y0swNqIbbTOnutxg=", - "dev": true, - "requires": { - "ansi-styles": "^2.0.1", - "diff": "^1.3.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - } - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "doctrine-temporary-fork": { - "version": "2.0.0-alpha-allowarrayindex", - "resolved": "https://registry.npmjs.org/doctrine-temporary-fork/-/doctrine-temporary-fork-2.0.0-alpha-allowarrayindex.tgz", - "integrity": "sha1-QAFahn6yfnWybIKLcVJPE3+J+fA=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "documentation": { - "version": "9.0.0-alpha.1", - "resolved": "https://registry.npmjs.org/documentation/-/documentation-9.0.0-alpha.1.tgz", - "integrity": "sha512-a3HUcoN/cdjLuiJT6EnobsZ/B0uhgmhYmLunqMw+IqAErd2AoaKp8cZcA8WFOqXAMdlmQIEmWkiINstTc3MYyQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.2", - "@babel/generator": "^7.1.3", - "@babel/parser": "7.1.3", - "@babel/plugin-proposal-class-properties": "^7.1.0", - "@babel/plugin-proposal-decorators": "^7.1.2", - "@babel/plugin-proposal-do-expressions": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-export-namespace-from": "^7.0.0", - "@babel/plugin-proposal-function-bind": "^7.0.0", - "@babel/plugin-proposal-function-sent": "^7.1.0", - "@babel/plugin-proposal-json-strings": "^7.0.0", - "@babel/plugin-proposal-logical-assignment-operators": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-proposal-pipeline-operator": "^7.0.0", - "@babel/plugin-proposal-throw-expressions": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-import-meta": "^7.0.0", - "@babel/preset-env": "^7.1.0", - "@babel/preset-flow": "^7.0.0", - "@babel/preset-react": "^7.0.0", - "@babel/preset-stage-0": "^7.0.0", - "@babel/traverse": "^7.1.4", - "@babel/types": "^7.1.3", - "ansi-html": "^0.0.7", - "babelify": "^10.0.0", - "chalk": "^2.3.0", - "chokidar": "^2.0.0", - "concat-stream": "^1.6.0", - "disparity": "^2.0.0", - "doctrine-temporary-fork": "2.0.1", - "get-port": "^4.0.0", - "git-url-parse": "^10.0.1", - "github-slugger": "1.2.0", - "glob": "^7.1.2", - "globals-docs": "^2.4.0", - "highlight.js": "^9.12.0", - "js-yaml": "^3.10.0", - "lodash": "^4.17.10", - "mdast-util-inject": "^1.1.0", - "micromatch": "^3.1.5", - "mime": "^2.2.0", - "module-deps-sortable": "5.0.0", - "parse-filepath": "^1.0.2", - "pify": "^4.0.0", - "read-pkg-up": "^4.0.0", - "remark": "^9.0.0", - "remark-html": "^8.0.0", - "remark-reference-links": "^4.0.1", - "remark-toc": "^5.0.0", - "remote-origin-url": "0.4.0", - "resolve": "^1.8.1", - "stream-array": "^1.1.2", - "strip-json-comments": "^2.0.1", - "tiny-lr": "^1.1.0", - "unist-builder": "^1.0.2", - "unist-util-visit": "^1.3.0", - "vfile": "^3.0.0", - "vfile-reporter": "^5.0.0", - "vfile-sort": "^2.1.0", - "vinyl": "^2.1.0", - "vinyl-fs": "^3.0.2", - "vue-template-compiler": "^2.5.16", - "yargs": "^9.0.1" - }, - "dependencies": { - "@babel/parser": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.1.3.tgz", - "integrity": "sha512-gqmspPZOMW3MIRb9HlrnbZHXI1/KHTOroBwN1NcLL6pWxzqzEKGvRTq0W/PxS45OtQGbaFikSQpkS5zbnsQm2w==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "babelify": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", - "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", - "dev": true - }, - "doctrine-temporary-fork": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/doctrine-temporary-fork/-/doctrine-temporary-fork-2.0.1.tgz", - "integrity": "sha512-+GQh3niRkKtSr7cKDo8po+NHkJZyC2Ebwvjz9fvq0ReQr9kIDS6BY9MDrzx+KbbLxvSj3vD/eUaeIoURHzEAFQ==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "get-port": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.0.0.tgz", - "integrity": "sha512-Yy3yNI2oShgbaWg4cmPhWjkZfktEvpKI09aDX4PZzNtlU9obuYrX7x2mumQsrNxlF+Ls7OtMQW/u+X4s896bOQ==", - "dev": true - }, - "git-url-parse": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-10.1.0.tgz", - "integrity": "sha512-goZOORAtFjU1iG+4zZgWq+N7It09PqS3Xsy43ZwhP5unDD0tTSmXTpqULHodMdJXGejm3COwXIhIRT6Z8DYVZQ==", - "dev": true, - "requires": { - "git-up": "^2.0.0" - } - }, - "hast-util-to-html": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-4.0.1.tgz", - "integrity": "sha512-2emzwyf0xEsc4TBIPmDJmBttIw8R4SXAJiJZoiRR/s47ODYWgOqNoDbf2SJAbMbfNdFWMiCSOrI3OVnX6Qq2Mg==", - "dev": true, - "requires": { - "ccount": "^1.0.0", - "comma-separated-tokens": "^1.0.1", - "hast-util-is-element": "^1.0.0", - "hast-util-whitespace": "^1.0.0", - "html-void-elements": "^1.0.0", - "property-information": "^4.0.0", - "space-separated-tokens": "^1.0.0", - "stringify-entities": "^1.0.1", - "unist-util-is": "^2.0.0", - "xtend": "^4.0.1" - } - }, - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", - "dev": true - }, - "module-deps-sortable": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/module-deps-sortable/-/module-deps-sortable-5.0.0.tgz", - "integrity": "sha512-bnGGeghQmz/t/6771/KC4FmxpVm126iR6AAzzq4N6hVZQVl4+ZZBv+VF3PJmDyxXtVtgcgTSSP7NL+jq1QAHrg==", - "dev": true, - "requires": { - "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", - "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" - }, - "dependencies": { - "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "~2.0.0", - "typedarray": "~0.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "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" - } - } - } - } - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "property-information": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-4.2.0.tgz", - "integrity": "sha512-TlgDPagHh+eBKOnH2VYvk8qbwsCG/TAJdmTL7f1PROUcSO8qt/KSmShEQ/OKvock8X9tFjtqjCScyOkkkvIKVQ==", - "dev": true, - "requires": { - "xtend": "^4.0.1" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "remark-html": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/remark-html/-/remark-html-8.0.0.tgz", - "integrity": "sha512-3V2391GL3hxKhrkzYOyfPpxJ6taIKLCfuLVqumeWQOk3H9nTtSQ8St8kMYkBVIEAquXN1chT83qJ/2lAW+dpEg==", - "dev": true, - "requires": { - "hast-util-sanitize": "^1.0.0", - "hast-util-to-html": "^4.0.0", - "mdast-util-to-hast": "^3.0.0", - "xtend": "^4.0.1" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "vfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", - "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", - "dev": true, - "requires": { - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" - } - }, - "vfile-reporter": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-5.1.0.tgz", - "integrity": "sha512-I6h4GrkNCZf7nWCxcN7BSDAez8+4xD9+qfu5I7yroH6Kj+lpAFFIYfY6WgfCHyscAow5BkOpfHS5hHGBN1Qf8g==", - "dev": true, - "requires": { - "repeat-string": "^1.5.0", - "string-width": "^2.0.0", - "supports-color": "^5.4.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-sort": "^2.1.2", - "vfile-statistics": "^1.1.0" - } - }, - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - } - }, - "yargs": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", - "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" - }, - "dependencies": { - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - } - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "documentation-theme-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/documentation-theme-utils/-/documentation-theme-utils-3.0.0.tgz", - "integrity": "sha1-itJslFw3FNV0RRvmQCUKCkKOVk0=", - "dev": true, - "requires": { - "doctrine": "^1.2.0", - "globals-docs": "^2.2.0", - "unist-builder": "^1.0.0" - } - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "dot-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", - "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - } - } - }, - "edge-launcher": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/edge-launcher/-/edge-launcher-1.2.2.tgz", - "integrity": "sha1-60Cq+9Bnpup27/+rBke81VCbN7I=", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.84", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.84.tgz", - "integrity": "sha512-IYhbzJYOopiTaNWMBp7RjbecUBsbnbDneOP86f3qvS0G0xfzwNSvMJpTrvi5/Y1gU7tg2NAgeg8a8rCYvW9Whw==", - "dev": true - }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", - "dev": true - }, - "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "dev": true, - "requires": { - "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" - } - }, - "email-addresses": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.0.2.tgz", - "integrity": "sha512-IMn9dnwLMsgZjdUHswB/UZ0S8LQ/u+2/qjnHJ9tCtp3QHZsIYwJCiJOo2FT0i3CwwK/dtSODYtxuvzV4D9MY5g==", - "dev": true - }, - "emoji-regex": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", - "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "engine.io": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", - "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~3.3.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "engine.io-client": { - "version": "3.2.1", - "resolved": "http://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", - "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", - "dev": true, - "requires": { - "string-template": "~0.2.1", - "xtend": "~4.0.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", - "dev": true, - "requires": { - "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": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-promisify": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.0.1.tgz", - "integrity": "sha512-J3ZkwbEnnO+fGAKrjVpeUAnZshAdfZvbhQpqfIH9kSAspReRC4nJnu8ewm55b4y9ElyeuhCTzJD0XiH8Tsbhlw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "4.19.1", - "resolved": "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, - "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "eslint-config-standard": { - "version": "11.0.0", - "resolved": "http://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-11.0.0.tgz", - "integrity": "sha512-oDdENzpViEe5fwuRCWla7AXQd++/oyIp8zP+iP9jiUPG6NBj3SHgdgtl/kTn00AjeN+1HNvavTKmYbMo+xMOlw==", - "dev": true - }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.5.0" - } - }, - "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", - "dev": true, - "requires": { - "debug": "^2.6.8", - "pkg-dir": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - } - } - }, - "eslint-plugin-import": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", - "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", - "dev": true, - "requires": { - "contains-path": "^0.1.0", - "debug": "^2.6.8", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.2.0", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", - "read-pkg-up": "^2.0.0", - "resolve": "^1.6.0" - }, - "dependencies": { - "load-json-file": { - "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - } - } - }, - "eslint-plugin-node": { - "version": "6.0.1", - "resolved": "http://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz", - "integrity": "sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw==", - "dev": true, - "requires": { - "ignore": "^3.3.6", - "minimatch": "^3.0.4", - "resolve": "^1.3.3", - "semver": "^5.4.1" - } - }, - "eslint-plugin-promise": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz", - "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==", - "dev": true - }, - "eslint-plugin-standard": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.1.0.tgz", - "integrity": "sha512-fVcdyuKRr0EZ4fjWl3c+gp1BANFJD1+RaWa2UPYfMZ6jCtp5RG00kSaXnK/dE5sYzt4kaWJ9qdxqUfc0d9kX0w==", - "dev": true - }, - "eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true - }, - "espree": { - "version": "3.5.4", - "resolved": "http://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", - "dev": true - }, - "events": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "exenv": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", - "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50=", - "dev": true - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "dev": true, - "requires": { - "array-slice": "^0.2.3", - "array-unique": "^0.2.1", - "braces": "^0.1.2" - }, - "dependencies": { - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true, - "requires": { - "expand-range": "^0.1.0" - } - }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "^0.1.1", - "repeat-string": "^0.2.2" - } - }, - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "^2.1.0" - }, - "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "finalhandler": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - } - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "2.2.0", - "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "dev": true, - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "http://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - } - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "filename-reserved-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", - "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=", - "dev": true - }, - "filenamify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", - "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=", - "dev": true, - "requires": { - "filename-reserved-regex": "^1.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" - } - }, - "filenamify-url": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/filenamify-url/-/filenamify-url-1.0.0.tgz", - "integrity": "sha1-syvYExnvWGO3MHi+1Q9GpPeXX1A=", - "dev": true, - "requires": { - "filenamify": "^1.0.0", - "humanize-url": "^1.0.0" - } - }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" - } - }, - "find-parent-dir": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", - "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", - "dev": true - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "first-chunk-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", - "dev": true - }, - "flat-cache": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.2.tgz", - "integrity": "sha512-KByBY8c98sLUAGpnmjEdWTrtrLZRtZdwds+kAL/ciFXTCb7AZgqKsAnVnYFQj1hxepwO8JKN/8AsRWwLq+RK0A==", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "del": "^3.0.0", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" - } - }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" - } - }, - "follow-redirects": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.9.tgz", - "integrity": "sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==", - "dev": true, - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-access": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "^1.0.0" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - } - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "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" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "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.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true, - "dev": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" - }, - "get-pkg-repo": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", - "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "meow": "^3.3.0", - "normalize-package-data": "^2.3.0", - "parse-github-repo-url": "^1.3.0", - "through2": "^2.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "meow": { - "version": "3.7.0", - "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - } - } - }, - "get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "gh-got": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-6.0.0.tgz", - "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", - "dev": true, - "requires": { - "got": "^7.0.0", - "is-plain-obj": "^1.1.0" - }, - "dependencies": { - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "dev": true - }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - } - } - }, - "gh-pages": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-2.0.1.tgz", - "integrity": "sha512-uFlk3bukljeiWKQ2XvPfjcSi/ou7IfoDf2p+Fj672saLAr8bnOdFVqI/JSgrSgInKpCg5BksxEwGUl++dbg8Dg==", - "dev": true, - "requires": { - "async": "^2.6.1", - "commander": "^2.18.0", - "email-addresses": "^3.0.1", - "filenamify-url": "^1.0.0", - "fs-extra": "^7.0.0", - "globby": "^6.1.0", - "graceful-fs": "^4.1.11", - "rimraf": "^2.6.2" - } - }, - "git-raw-commits": { - "version": "1.3.6", - "resolved": "http://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz", - "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==", - "dev": true, - "requires": { - "dargs": "^4.0.1", - "lodash.template": "^4.0.2", - "meow": "^4.0.0", - "split2": "^2.0.0", - "through2": "^2.0.0" - } - }, - "git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", - "dev": true, - "requires": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "git-semver-tags": { - "version": "1.3.6", - "resolved": "http://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz", - "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==", - "dev": true, - "requires": { - "meow": "^4.0.0", - "semver": "^5.5.0" - } - }, - "git-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-2.1.0.tgz", - "integrity": "sha512-MJgwfcSd9qxgDyEYpRU/CDxNpUadrK80JHuEQDG4Urn0m7tpSOgCBrtiSIa9S9KH8Tbuo/TN8SSQmJBvsw1HkA==", - "dev": true, - "requires": { - "is-ssh": "^1.3.0", - "parse-url": "^3.0.2" - } - }, - "git-url-parse": { - "version": "8.3.1", - "resolved": "http://registry.npmjs.org/git-url-parse/-/git-url-parse-8.3.1.tgz", - "integrity": "sha512-r/FxXIdfgdSO+V2zl4ZK1JGYkHT9nqVRSzom5WsYPLg3XzeBeKPl3R/6X9E9ZJRx/sE/dXwXtfl+Zp7YL8ktWQ==", - "dev": true, - "requires": { - "git-up": "^2.0.0", - "parse-domain": "^2.0.0" - } - }, - "git-validate": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/git-validate/-/git-validate-2.2.4.tgz", - "integrity": "sha512-BM49gj2g/VtV+AvsaGYfIXavVyWUfqcJt2klTOr7kji/HYqpgwB6CmlevIJuPyGoBPkIUUXNSov33Ht22juh0Q==", - "dev": true - }, - "gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", - "dev": true, - "requires": { - "ini": "^1.3.2" - } - }, - "github-slugger": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.2.0.tgz", - "integrity": "sha512-wIaa75k1vZhyPm9yWrD08A5Xnx/V+RmzGrpjQuLemGKSb77Qukiaei58Bogrl/LZSADDfPzKJX8jhLs4CRTl7Q==", - "dev": true, - "requires": { - "emoji-regex": ">=6.0.0 <=6.1.1" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "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" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-modules-path": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/global-modules-path/-/global-modules-path-2.3.0.tgz", - "integrity": "sha512-HchvMJNYh9dGSCy8pOQ2O8u/hoXaL+0XhnrwH0RyLiSXMMTl9W3N6KUU73+JFOg5PGjtzl6VZzUQsnrpm7Szag==", - "dev": true - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globals": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz", - "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==", - "dev": true - }, - "globals-docs": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/globals-docs/-/globals-docs-2.4.0.tgz", - "integrity": "sha512-B69mWcqCmT3jNYmSxRxxOXWfzu3Go8NQXPfl2o0qPd1EEFhwW0dFUg9ztTu915zPQzqwIhWAlw6hmfIcCK4kkQ==", - "dev": true - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", - "dev": true - }, - "gulp-sourcemaps": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", - "dev": true, - "requires": { - "convert-source-map": "^1.1.1", - "graceful-fs": "^4.1.2", - "strip-bom": "^2.0.0", - "through2": "^2.0.0", - "vinyl": "^1.0.0" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } - } - } - }, - "gzip-size": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", - "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "handlebars": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", - "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", - "dev": true, - "requires": { - "async": "^2.5.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true, - "optional": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", - "dev": true, - "optional": true, - "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1" - } - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.2.tgz", - "integrity": "sha512-OFxb5MZXCUMx43X7O8LK4FKggEQx6yC5QPmOcBnYbJ9UjxEcMcrMbaR0af5HZpqeFopw2GwQRQi34ZXI7YLM5w==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", - "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hast-util-is-element": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.0.2.tgz", - "integrity": "sha512-4MEtyofNi3ZunPFrp9NpTQdNPN24xvLX3M+Lr/RGgPX6TLi+wR4/DqeoyQ7lwWcfUp4aevdt4RR0r7ZQPFbHxw==", - "dev": true - }, - "hast-util-sanitize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-1.2.1.tgz", - "integrity": "sha512-bRyZ316tTETfxkpM0De0Fk5slEtR5hvkzDGbHpEAjZRmfQyT3xMTzMk0/gGWlkqsfafFCaPNbrtPdZBPMK8X8A==", - "dev": true, - "requires": { - "xtend": "^4.0.1" - } - }, - "hast-util-to-html": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-3.1.0.tgz", - "integrity": "sha1-iCyZhJ5AEw6ZHAQuRW1FPZXDbP8=", - "dev": true, - "requires": { - "ccount": "^1.0.0", - "comma-separated-tokens": "^1.0.1", - "hast-util-is-element": "^1.0.0", - "hast-util-whitespace": "^1.0.0", - "html-void-elements": "^1.0.0", - "kebab-case": "^1.0.0", - "property-information": "^3.1.0", - "space-separated-tokens": "^1.0.0", - "stringify-entities": "^1.0.1", - "unist-util-is": "^2.0.0", - "xtend": "^4.0.1" - } - }, - "hast-util-whitespace": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.2.tgz", - "integrity": "sha512-4JT8B0HKPHBMFZdDQzexjxwhKx9TrpV/+uelvmqlPu8RqqDrnNIEHDtDZCmgE+4YmcFAtKVPLmnY3dQGRaN53A==", - "dev": true - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "highlight.js": { - "version": "9.13.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", - "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoek": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.0.2.tgz", - "integrity": "sha512-0RGPLkyxpsMJVj/iOCaJaIWFEch988eUicJJpRiQ+Or1CMvBXcoZPlSx9FhreDWw4hxMYy8xgTEdlsYQDTnxWA==", - "dev": true - }, - "home-or-tmp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-3.0.0.tgz", - "integrity": "sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs=", - "dev": true - }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "dev": true - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "html-void-elements": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.3.tgz", - "integrity": "sha512-SaGhCDPXJVNrQyKMtKy24q6IMdXg5FCPN3z+xizxw9l+oXQw5fOoaj/ERU5KqWhSYhXtW5bWthlDbTDLBhJQrA==", - "dev": true - }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "http-parser-js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", - "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", - "dev": true - }, - "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", - "dev": true, - "requires": { - "eventemitter3": "^3.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "humanize-url": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/humanize-url/-/humanize-url-1.0.1.tgz", - "integrity": "sha1-9KuZ4NKIF0yk4eUEB8VfuuRk7/8=", - "dev": true, - "requires": { - "normalize-url": "^1.0.0", - "strip-url-auth": "^1.0.0" - } - }, - "hyphenate-style-name": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz", - "integrity": "sha1-MRYKNpMK2vH8BMYHT360FGXU7Es=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "inline-style-prefixer": { - "version": "2.0.5", - "resolved": "http://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-2.0.5.tgz", - "integrity": "sha1-wVPH6I/YT+9cYC6VqBaLJ3BnH+c=", - "dev": true, - "requires": { - "bowser": "^1.0.0", - "hyphenate-style-name": "^1.0.1" - } - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "interface-connection": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/interface-connection/-/interface-connection-0.3.2.tgz", - "integrity": "sha1-5JSYg/bqeft+3QHuP0/KR6Kf0sQ=", - "requires": { - "pull-defer": "~0.2.2", - "timed-tape": "~0.1.1" - } - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, - "into-stream": { - "version": "3.1.0", - "resolved": "http://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", - "dev": true, - "requires": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "ip-address": { - "version": "5.8.9", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-5.8.9.tgz", - "integrity": "sha512-7ay355oMN34iXhET1BmCJVsHjOTSItEEIIpOs38qUC23AIhOy+xIPnkrTuEFjeLMrTJ7m8KMXWgWfy/2Vn9sDw==", - "requires": { - "jsbn": "1.1.0", - "lodash.find": "^4.6.0", - "lodash.max": "^4.0.1", - "lodash.merge": "^4.6.0", - "lodash.padstart": "^4.6.1", - "lodash.repeat": "^4.1.0", - "sprintf-js": "1.1.0" - } - }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", - "dev": true - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-alphabetical": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", - "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==", - "dev": true - }, - "is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", - "dev": true - }, - "is-alphanumerical": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", - "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", - "dev": true, - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-decimal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", - "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hexadecimal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", - "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==", - "dev": true - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "dev": true - }, - "is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", - "dev": true, - "requires": { - "symbol-observable": "^1.1.0" - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-ssh": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.0.tgz", - "integrity": "sha1-6+oRaaJhTaOSpjdANmw84EnY3/Y=", - "dev": true, - "requires": { - "protocols": "^1.1.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", - "dev": true, - "requires": { - "text-extensions": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true - }, - "is-whitespace-character": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz", - "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-word-character": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz", - "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", - "dev": true, - "requires": { - "buffer-alloc": "^1.2.0" - } - }, - "isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "dev": true, - "requires": { - "punycode": "2.x.x" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "dev": true, - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.0.0.tgz", - "integrity": "sha512-eQY9vN9elYjdgN9Iv6NS/00bptm02EBBk70lRMaVjeA6QYocQgenVrSgC28TJurdnZa80AGO3ASdFN+w/njGiQ==", - "dev": true, - "requires": { - "@babel/generator": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "istanbul-lib-coverage": "^2.0.1", - "semver": "^5.5.0" - } - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "joi": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/joi/-/joi-14.0.4.tgz", - "integrity": "sha512-KUXRcinDUMMbtlOk7YLGHQvG73dLyf8bmgE+6sBTkdJbZpeGVGAlPXEHLiQBV7KinD/VLD5OA0EUgoTTfbRAJQ==", - "dev": true, - "requires": { - "hoek": "6.x.x", - "isemail": "3.x.x", - "topo": "3.x.x" - } - }, - "js-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.4.tgz", - "integrity": "sha512-PxfGzSs0ztShKrUYPIn5r0MtyAhYcCwmndozzpz8YObbPnD1jFxzlBGbRnX2mIu6Z13xN6+PTu05TQFnZFlzow==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha1-sBMHyym2GKHtJux56RH4A8TaAEA=" - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonbird": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/jsonbird/-/jsonbird-2.2.2.tgz", - "integrity": "sha512-48n9HTL6Vxhr6WqX78ROH5NddK//ZnSdu1ZnPyyOl9IzF2PyRmwC8nCKPiRFo1wx7/Byq5YezCqokq9T/McLhw==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "readable-stream": "^2.1.4", - "shortid": "^2.2.6" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "karma": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.1.tgz", - "integrity": "sha512-NetT3wPCQMNB36uiL9LLyhrOt8SQwrEKt0xD3+KpTCfm0VxVyUJdPL5oTq2Ic5ouemgL/Iz4wqXEbF3zea9kQQ==", - "dev": true, - "requires": { - "bluebird": "^3.3.0", - "body-parser": "^1.16.1", - "chokidar": "^2.0.3", - "colors": "^1.1.0", - "combine-lists": "^1.0.0", - "connect": "^3.6.0", - "core-js": "^2.2.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.0", - "expand-braces": "^0.1.1", - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "http-proxy": "^1.13.0", - "isbinaryfile": "^3.0.0", - "lodash": "^4.17.4", - "log4js": "^3.0.0", - "mime": "^2.3.1", - "minimatch": "^3.0.2", - "optimist": "^0.6.1", - "qjobs": "^1.1.4", - "range-parser": "^1.2.0", - "rimraf": "^2.6.0", - "safe-buffer": "^5.0.1", - "socket.io": "2.1.1", - "source-map": "^0.6.1", - "tmp": "0.0.33", - "useragent": "2.2.1" - }, - "dependencies": { - "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "karma-chrome-launcher": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", - "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", - "dev": true, - "requires": { - "fs-access": "^1.0.0", - "which": "^1.2.1" - } - }, - "karma-edge-launcher": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/karma-edge-launcher/-/karma-edge-launcher-0.4.2.tgz", - "integrity": "sha512-YAJZb1fmRcxNhMIWYsjLuxwODBjh2cSHgTW/jkVmdpGguJjLbs9ZgIK/tEJsMQcBLUkO+yO4LBbqYxqgGW2HIw==", - "dev": true, - "requires": { - "edge-launcher": "1.2.2" - } - }, - "karma-firefox-launcher": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.1.0.tgz", - "integrity": "sha512-LbZ5/XlIXLeQ3cqnCbYLn+rOVhuMIK9aZwlP6eOLGzWdo1UVp7t6CN3DP4SafiRLjexKwHeKHDm0c38Mtd3VxA==", - "dev": true - }, - "karma-junit-reporter": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/karma-junit-reporter/-/karma-junit-reporter-1.2.0.tgz", - "integrity": "sha1-T5xAzt+xo5X4rvh2q/lhiZF8Y5Y=", - "dev": true, - "requires": { - "path-is-absolute": "^1.0.0", - "xmlbuilder": "8.2.2" - } - }, - "karma-mocha": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", - "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=", - "dev": true, - "requires": { - "minimist": "1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "karma-mocha-own-reporter": { - "version": "git+https://github.com/dryajov/karma-mocha-own-reporter.git#d562a92a12d5c76469a05d67cee19bcb8db22b23", - "from": "git+https://github.com/dryajov/karma-mocha-own-reporter.git#d562a92a12d5c76469a05d67cee19bcb8db22b23", - "dev": true - }, - "karma-mocha-webworker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/karma-mocha-webworker/-/karma-mocha-webworker-1.3.0.tgz", - "integrity": "sha1-taQwG1m6hqCO5bXwrvHtuGO+yyY=", - "dev": true, - "requires": { - "jsonbird": "^2.0.0", - "minimatch": "^3.0.3" - } - }, - "karma-sourcemap-loader": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", - "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2" - } - }, - "karma-webpack": { - "version": "4.0.0-beta.0", - "resolved": "http://registry.npmjs.org/karma-webpack/-/karma-webpack-4.0.0-beta.0.tgz", - "integrity": "sha512-3mBfzOSnWdlMNtIIFpZ0/fGbXCq6dko0HOnwU7nntpNu7tTcY7/JbaWV8bxvmIre+yNUPIglq7p3EuwXj35BmA==", - "dev": true, - "requires": { - "async": "^2.0.0", - "babel-runtime": "^6.0.0", - "loader-utils": "^1.0.0", - "lodash": "^4.0.0", - "source-map": "^0.5.6", - "webpack-dev-middleware": "^3.0.1" - } - }, - "kebab-case": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/kebab-case/-/kebab-case-1.0.0.tgz", - "integrity": "sha1-P55JkK3K0MaGwOcB92RYaPdfkes=", - "dev": true - }, - "keypress": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.2.1.tgz", - "integrity": "sha1-HoBFQlABjbrUw/6USX1uZ7YmnHc=", - "dev": true - }, - "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", - "dev": true, - "requires": { - "flush-write-stream": "^1.0.2" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "libp2p-tcp": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/libp2p-tcp/-/libp2p-tcp-0.13.0.tgz", - "integrity": "sha512-bsmfxi+uVegK61x9UxBEgWtvujPl+zwzuVEyaVRs2IxHu6OE5MGKnj7AflzlK4e3w2HZn8nm4qwMV5m+fhqK1g==", - "requires": { - "class-is": "^1.1.0", - "debug": "^3.1.0", - "interface-connection": "~0.3.2", - "ip-address": "^5.8.9", - "lodash.includes": "^4.3.0", - "lodash.isfunction": "^3.0.9", - "mafmt": "^6.0.2", - "multiaddr": "^5.0.0", - "once": "^1.4.0", - "stream-to-pull-stream": "^1.7.2" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "listr": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.2.tgz", - "integrity": "sha512-vmaNJ1KlGuGWShHI35X/F8r9xxS0VTHh9GejVXwSN20fG5xpq3Jh4bJbnumoT6q5EDM/8/YP1z3YMtQbFmhuXw==", - "dev": true, - "requires": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.4.0", - "listr-verbose-renderer": "^0.4.0", - "p-map": "^1.1.1", - "rxjs": "^6.1.0" - }, - "dependencies": { - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - } - } - }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", - "dev": true - }, - "listr-update-renderer": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz", - "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^1.0.2", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "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" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "listr-verbose-renderer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", - "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "cli-cursor": "^1.0.2", - "date-fns": "^1.27.2", - "figures": "^1.7.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "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" - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "livereload-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", - "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "loader-runner": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz", - "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==", - "dev": true - }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - }, - "lodash.find": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", - "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=" - }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, - "lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" - }, - "lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", - "dev": true - }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" - }, - "lodash.max": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.max/-/lodash.max-4.0.1.tgz", - "integrity": "sha1-hzVWbGGLNan3YFILSHrnllivE2o=" - }, - "lodash.merge": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", - "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==" - }, - "lodash.mergewith": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", - "dev": true - }, - "lodash.omit": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", - "dev": true - }, - "lodash.padstart": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" - }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", - "dev": true - }, - "lodash.repeat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-4.1.0.tgz", - "integrity": "sha1-/H3oEx2MisB+S0n3T/6CnR8r7EQ=" - }, - "lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=", - "dev": true - }, - "lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha1-lDbjTtJgk+1/+uGTYUQ1CRXZrdg=", - "dev": true - }, - "lodash.template": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", - "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", - "dev": true, - "requires": { - "lodash._reinterpolate": "~3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", - "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", - "dev": true, - "requires": { - "lodash._reinterpolate": "~3.0.0" - } - }, - "lodash.topairs": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.topairs/-/lodash.topairs-4.3.0.tgz", - "integrity": "sha1-O23qo31g+xFnE8RsXxfqGQ7EjWQ=", - "dev": true - }, - "lodash.upperfirst": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha1-E2Xt9DFIBIHvDRxolXpe2Z1J984=", - "dev": true - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "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" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "log-update": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", - "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", - "dev": true, - "requires": { - "ansi-escapes": "^1.0.0", - "cli-cursor": "^1.0.2" - }, - "dependencies": { - "ansi-escapes": { - "version": "1.4.0", - "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - } - } - }, - "log4js": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz", - "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==", - "dev": true, - "requires": { - "circular-json": "^0.5.5", - "date-format": "^1.2.0", - "debug": "^3.1.0", - "rfdc": "^1.1.2", - "streamroller": "0.7.0" - }, - "dependencies": { - "circular-json": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz", - "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==", - "dev": true - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "longest-streak": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz", - "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==", - "dev": true - }, - "looper": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/looper/-/looper-3.0.0.tgz", - "integrity": "sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k=" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "mafmt": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-6.0.2.tgz", - "integrity": "sha512-+ydrVDp/bo2GPTNN0378AFX66IJBlbrIBY0RaILWC9AICr9kviX5fonHeKsZiesEuuYetQeRhnZPL/J2k8vHAA==", - "requires": { - "multiaddr": "^5.0.0" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "map-age-cleaner": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz", - "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "markdown-escapes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz", - "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==", - "dev": true - }, - "markdown-table": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.2.tgz", - "integrity": "sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==", - "dev": true - }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdast-util-compact": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.2.tgz", - "integrity": "sha512-d2WS98JSDVbpSsBfVvD9TaDMlqPRz7ohM/11G0rp5jOBb5q96RJ6YLszQ/09AAixyzh23FeIpCGqfaamEADtWg==", - "dev": true, - "requires": { - "unist-util-visit": "^1.1.0" - } - }, - "mdast-util-definitions": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-1.2.3.tgz", - "integrity": "sha512-P6wpRO8YVQ1iv30maMc93NLh7COvufglBE8/ldcOyYmk5EbfF0YeqlLgtqP/FOBU501Kqar1x5wYWwB3Nga74g==", - "dev": true, - "requires": { - "unist-util-visit": "^1.0.0" - } - }, - "mdast-util-inject": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-inject/-/mdast-util-inject-1.1.0.tgz", - "integrity": "sha1-2wa4tYW+lZotzS+H9HK6m3VvNnU=", - "dev": true, - "requires": { - "mdast-util-to-string": "^1.0.0" - } - }, - "mdast-util-to-hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-3.0.4.tgz", - "integrity": "sha512-/eIbly2YmyVgpJNo+bFLLMCI1XgolO/Ffowhf+pHDq3X4/V6FntC9sGQCDLM147eTS+uSXv5dRzJyFn+o0tazA==", - "dev": true, - "requires": { - "collapse-white-space": "^1.0.0", - "detab": "^2.0.0", - "mdast-util-definitions": "^1.2.0", - "mdurl": "^1.0.1", - "trim": "0.0.1", - "trim-lines": "^1.0.0", - "unist-builder": "^1.0.1", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^1.1.0", - "xtend": "^4.0.1" - } - }, - "mdast-util-to-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.0.5.tgz", - "integrity": "sha512-2qLt/DEOo5F6nc2VFScQiHPzQ0XXcabquRJxKMhKte8nt42o08HUxNDPk7tt0YPxnWjAT11I1SYi0X0iPnfI5A==", - "dev": true - }, - "mdast-util-toc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-toc/-/mdast-util-toc-3.0.0.tgz", - "integrity": "sha512-rdpar0+u7H8RpsxVagGUG11VEaxkWlDefGMarG+6xDurTnkD14DMTDo9FQ1lCC3oElzwF3+EEsfeAd/wHrIjoQ==", - "dev": true, - "requires": { - "github-slugger": "^1.1.1", - "mdast-util-to-string": "^1.0.2", - "unist-util-visit": "^1.1.0" - } - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", - "dev": true, - "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist": "^1.1.3", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", - "dev": true - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "dev": true, - "requires": { - "mime-db": "~1.37.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "minimist-options": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0" - } - }, - "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^2.0.1", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "commander": { - "version": "2.15.1", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "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" - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "mocha-jenkins-reporter": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/mocha-jenkins-reporter/-/mocha-jenkins-reporter-0.4.1.tgz", - "integrity": "sha512-IqnIylrkKJG0lxeoawRkhv/uiYojMEw3o9TQOpDFarPYKVq4ymngVPwsyfMB0XMDqtDbOTOCviFg8xOLHb80/Q==", - "dev": true, - "requires": { - "diff": "1.0.7", - "mkdirp": "0.5.1", - "mocha": "^5.2.0", - "xml": "^1.0.1" - }, - "dependencies": { - "diff": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.0.7.tgz", - "integrity": "sha1-JLuwAcSn1VIhaefKvbLCgU7ZHPQ=", - "dev": true - } - } - }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true - }, - "module-deps-sortable": { - "version": "4.0.6", - "resolved": "http://registry.npmjs.org/module-deps-sortable/-/module-deps-sortable-4.0.6.tgz", - "integrity": "sha1-ElGkuixEqS32mJvQKdoSGk8hCbA=", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "browser-resolve": "^1.7.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" - }, - "dependencies": { - "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "~2.0.0", - "typedarray": "~0.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "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" - } - } - } - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "multiaddr": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-5.0.2.tgz", - "integrity": "sha512-dXz1chaUHV6L6okujDLS7uRA6NmCbitpikOJA0vMMnrwVyai5kC3ot2CSLrSfj3B8XIgNzpe/j5auSYrnbGGzA==", - "requires": { - "bs58": "^4.0.1", - "class-is": "^1.1.0", - "ip": "^1.1.5", - "ip-address": "^5.8.9", - "lodash.filter": "^4.6.0", - "lodash.map": "^4.6.0", - "varint": "^5.0.0", - "xtend": "^4.0.1" - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", - "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", - "dev": true, - "optional": true - }, - "nanoid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.0.0.tgz", - "integrity": "sha512-SG2qscLE3iM4C0CNzGrsAojJHSVHMS1J8NnvJ31P1lH8P0hGHOiafmniNJz6w6q7vuoDlV7RdySlJgtqkFEVtQ==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "native-or-another": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/native-or-another/-/native-or-another-2.0.0.tgz", - "integrity": "sha1-F6Vn+Svuqc1xrP+Wp2gac17KO/8=", - "dev": true, - "requires": { - "native-or-bluebird": "^1.1.2" - } - }, - "native-or-bluebird": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/native-or-bluebird/-/native-or-bluebird-1.2.0.tgz", - "integrity": "sha1-OcR7/Xgl0fuf+tMiEK4l2q3xAck=", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^1.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.0", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.10.3", - "vm-browserify": "0.0.4" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - } - } - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-releases": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.3.tgz", - "integrity": "sha512-ZaZWMsbuDcetpHmYeKWPO6e63pSXLb50M7lJgCbcM2nC/nQC3daNifmtp5a2kp7EWwYfhuvH6zLPWkrF8IiDdw==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - } - }, - "now-and-later": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz", - "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", - "dev": true, - "requires": { - "once": "^1.3.2" - } - }, - "npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", - "dev": true, - "requires": { - "which": "^1.2.10" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", - "dev": true, - "requires": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" - } - }, - "null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nyc": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.1.0.tgz", - "integrity": "sha512-3GyY6TpQ58z9Frpv4GMExE1SV2tAgYqC7HSy2omEhNiCT3mhT9NyiOvIE8zkbuJVFzmvvNTnE4h/7/wQae7xLg==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "arrify": "^1.0.1", - "caching-transform": "^2.0.0", - "convert-source-map": "^1.6.0", - "debug-log": "^1.0.1", - "find-cache-dir": "^2.0.0", - "find-up": "^3.0.0", - "foreground-child": "^1.5.6", - "glob": "^7.1.3", - "istanbul-lib-coverage": "^2.0.1", - "istanbul-lib-hook": "^2.0.1", - "istanbul-lib-instrument": "^3.0.0", - "istanbul-lib-report": "^2.0.2", - "istanbul-lib-source-maps": "^2.0.1", - "istanbul-reports": "^2.0.1", - "make-dir": "^1.3.0", - "merge-source-map": "^1.1.0", - "resolve-from": "^4.0.0", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "spawn-wrap": "^1.4.2", - "test-exclude": "^5.0.0", - "uuid": "^3.3.2", - "yargs": "11.1.0", - "yargs-parser": "^9.0.2" - }, - "dependencies": { - "align-text": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "amdefine": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "append-transform": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "default-require-extensions": "^2.0.0" - } - }, - "archy": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "arrify": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "async": { - "version": "1.5.2", - "bundled": true, - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "builtin-modules": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "caching-transform": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "make-dir": "^1.0.0", - "md5-hex": "^2.0.0", - "package-hash": "^2.0.0", - "write-file-atomic": "^2.0.0" - } - }, - "camelcase": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true - }, - "center-align": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, - "cliui": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "commondir": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "convert-source-map": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cross-spawn": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "debug": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "debug-log": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "default-require-extensions": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - } - }, - "error-ex": { - "version": "1.3.2", - "bundled": true, - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es6-error": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "execa": { - "version": "0.7.0", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "find-cache-dir": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "foreground-child": { - "version": "1.5.6", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "bundled": true, - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "requires": { - "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" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "handlebars": { - "version": "4.0.11", - "bundled": true, - "dev": true, - "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "bundled": true, - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "hosted-git-info": { - "version": "2.7.1", - "bundled": true, - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true, - "dev": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "bundled": true, - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "istanbul-lib-hook": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "append-transform": "^1.0.0" - } - }, - "istanbul-lib-report": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.1", - "make-dir": "^1.3.0", - "supports-color": "^5.4.0" - } - }, - "istanbul-lib-source-maps": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^2.0.1", - "make-dir": "^1.3.0", - "rimraf": "^2.6.2", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "handlebars": "^4.0.11" - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "lazy-cache": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "optional": true - }, - "lcid": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash.flattendeep": { - "version": "4.4.0", - "bundled": true, - "dev": true - }, - "longest": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "lru-cache": { - "version": "4.1.3", - "bundled": true, - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "md5-hex": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "md5-o-matic": "^0.1.1" - } - }, - "md5-o-matic": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "mem": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "merge-source-map": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true - } - } - }, - "mimic-fn": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.10", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - } - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "normalize-package-data": { - "version": "2.4.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optimist": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "os-locale": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "p-limit": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "package-hash": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "lodash.flattendeep": "^4.4.0", - "md5-hex": "^2.0.0", - "release-zalgo": "^1.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "path-key": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "path-type": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "release-zalgo": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "repeat-string": { - "version": "1.6.1", - "bundled": true, - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "right-align": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "source-map": { - "version": "0.5.7", - "bundled": true, - "dev": true, - "optional": true - }, - "spawn-wrap": { - "version": "1.4.2", - "bundled": true, - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - } - }, - "spdx-correct": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "string-width": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "test-exclude": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "arrify": "^1.0.1", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^1.0.1" - } - }, - "uglify-js": { - "version": "2.8.29", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "yargs": { - "version": "3.10.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "uuid": { - "version": "3.3.2", - "bundled": true, - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "bundled": true, - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "window-size": { - "version": "0.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "wordwrap": { - "version": "0.0.3", - "bundled": true, - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "write-file-atomic": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "y18n": { - "version": "3.2.1", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "2.1.2", - "bundled": true, - "dev": true - }, - "yargs": { - "version": "11.1.0", - "bundled": true, - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - }, - "dependencies": { - "cliui": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "bundled": true, - "dev": true - } - } - }, - "yargs-parser": { - "version": "9.0.2", - "bundled": true, - "dev": true, - "requires": { - "camelcase": "^4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "bundled": true, - "dev": true - } - } - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", - "dev": true - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - }, - "dependencies": { - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - } - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "output-file-sync": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz", - "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "is-plain-obj": "^1.1.0", - "mkdirp": "^0.5.1" - } - }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "http://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", - "dev": true - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz", - "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==", - "dev": true - }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - }, - "dependencies": { - "got": { - "version": "6.7.1", - "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - } - } - }, - "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", - "dev": true - }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", - "dev": true, - "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "dev": true, - "requires": { - "path-platform": "~0.11.15" - } - }, - "parse-asn1": { - "version": "5.1.1", - "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" - } - }, - "parse-domain": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/parse-domain/-/parse-domain-2.1.6.tgz", - "integrity": "sha512-OyFDkKhVqGLY/Bn5cUb00Y54SPA6z8adrIQDhKEfpMMyTV7JanQ8dGsClMEIgP5Jq/sOX2rMdFaLDZ4xbAT+pA==", - "dev": true, - "requires": { - "chai": "^4.1.2", - "got": "^8.0.1", - "mkdirp": "^0.5.1", - "mocha": "^4.0.1" - }, - "dependencies": { - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "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" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "mocha": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", - "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", - "dev": true, - "requires": { - "browser-stdout": "1.3.0", - "commander": "2.11.0", - "debug": "3.1.0", - "diff": "3.3.1", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.3", - "he": "1.1.1", - "mkdirp": "0.5.1", - "supports-color": "4.4.0" - } - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "^2.0.0" - } - } - } - }, - "parse-entities": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.0.tgz", - "integrity": "sha512-XXtDdOPLSB0sHecbEapQi6/58U/ODj/KWfIXmmMCJF/eRn8laX6LZbOyioMoETOOJoWRW8/qTSl5VQkUIfKM5g==", - "dev": true, - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-git-config": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-0.2.0.tgz", - "integrity": "sha1-Jygz/dFf6hRvt10zbSNrljtv9wY=", - "dev": true, - "requires": { - "ini": "^1.3.3" - } - }, - "parse-github-repo-url": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz", - "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=", - "dev": true - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parse-path": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-3.0.4.tgz", - "integrity": "sha512-wP70vtwv2DyrM2YoA7ZHVv4zIXa4P7dGgHlj+VwyXNDduLLVJ7NMY1zsFxjUUJ3DAwJLupGb1H5gMDDiNlJaxw==", - "dev": true, - "requires": { - "is-ssh": "^1.3.0", - "protocols": "^1.4.0" - } - }, - "parse-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-3.0.2.tgz", - "integrity": "sha1-YCeHpwY6eV1yuGcxl1BecvYGEL4=", - "dev": true, - "requires": { - "is-ssh": "^1.3.0", - "normalize-url": "^1.9.1", - "parse-path": "^3.0.1", - "protocols": "^1.4.0" - } - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" - }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.0.tgz", - "integrity": "sha512-8t5BsXy1LUIjn3WWOlOuFDuKswhQb/tkak641lvBgmPOBUQHXveORtlMCp6OdPV1dtuTaEahKA8VNz6uLfKBtA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "http://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", - "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", - "dev": true - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "requires": { - "asap": "~2.0.3" - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "prompt-promise": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/prompt-promise/-/prompt-promise-1.0.3.tgz", - "integrity": "sha1-eM5Py5oUoQjEkXTy2AjEQNG94mU=", - "dev": true, - "requires": { - "keypress": "~0.2.1", - "native-or-another": "~2.0.0" - } - }, - "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", - "dev": true, - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "property-information": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-3.2.0.tgz", - "integrity": "sha1-/RSDyPusYYCPX+NZ52k6H0ilgzE=", - "dev": true - }, - "protocols": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.6.tgz", - "integrity": "sha1-+LsmPqG1/Xp2BNJri+Ob13Z4v4o=", - "dev": true - }, - "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "pull-defer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/pull-defer/-/pull-defer-0.2.3.tgz", - "integrity": "sha512-/An3KE7mVjZCqNhZsr22k1Tx8MACnUnHZZNPSJ0S62td8JtYr/AiRG42Vz7Syu31SoTLUzVIe61jtT/pNdjVYA==" - }, - "pull-generate": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pull-generate/-/pull-generate-2.2.0.tgz", - "integrity": "sha1-bXg38O7eq/UUs0ekw1ZcsZRnxJw=" - }, - "pull-pair": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pull-pair/-/pull-pair-1.1.0.tgz", - "integrity": "sha1-fuQnJj/fTaglOXrAoF4atLdL120=" - }, - "pull-stream": { - "version": "3.6.9", - "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.9.tgz", - "integrity": "sha512-hJn4POeBrkttshdNl0AoSCVjMVSuBwuHocMerUdoZ2+oIUzrWHFTwJMlbHND7OiKLVgvz6TFj8ZUVywUMXccbw==" - }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true, - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "quick-lru": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", - "dev": true - }, - "radium": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/radium/-/radium-0.19.6.tgz", - "integrity": "sha512-IABYntqCwYelUUIwA52maSCgJbqtJjHKIoD21wgpw3dGhIUbJ5chDShDGdaFiEzdF03hN9jfQqlmn0bF4YhfrQ==", - "dev": true, - "requires": { - "array-find": "^1.0.0", - "exenv": "^1.2.1", - "inline-style-prefixer": "^2.0.5", - "prop-types": "^15.5.8" - } - }, - "radium-bootstrap-grid": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/radium-bootstrap-grid/-/radium-bootstrap-grid-0.1.8.tgz", - "integrity": "sha1-KcUC+wNyt3VDsw7W0H2EtDp6kk8=", - "dev": true - }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, - "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", - "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", - "dev": true, - "requires": { - "bytes": "1", - "string_decoder": "0.10" - }, - "dependencies": { - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "react": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz", - "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=", - "dev": true, - "requires": { - "create-react-class": "^15.6.0", - "fbjs": "^0.8.9", - "loose-envify": "^1.1.0", - "object-assign": "^4.1.0", - "prop-types": "^15.5.10" - } - }, - "react-dom": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.2.tgz", - "integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=", - "dev": true, - "requires": { - "fbjs": "^0.8.9", - "loose-envify": "^1.1.0", - "object-assign": "^4.1.0", - "prop-types": "^15.5.10" - } - }, - "react-icon-base": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/react-icon-base/-/react-icon-base-2.1.0.tgz", - "integrity": "sha1-oZbjP98eeqof2jrvu2i9rZ6Cp50=", - "dev": true - }, - "react-icons": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-2.2.7.tgz", - "integrity": "sha512-0n4lcGqzJFcIQLoQytLdJCE0DKSA9dkwEZRYoGrIDJZFvIT6Hbajx5mv9geqhqFiNjUgtxg8kPyDfjlhymbGFg==", - "dev": true, - "requires": { - "react-icon-base": "2.1.0" - } - }, - "react-pure-render": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/react-pure-render/-/react-pure-render-1.0.2.tgz", - "integrity": "sha1-nYqSjH8sN1E8LQZOV7Pjw1bp+rs=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "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.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", - "dev": true, - "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", - "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", - "dev": true - }, - "regenerator-transform": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz", - "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==", - "dev": true, - "requires": { - "private": "^0.1.6" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexpp": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true - }, - "regexpu-core": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.2.0.tgz", - "integrity": "sha512-Z835VSnJJ46CNBttalHD/dB+Sj2ezmY6Xp38npwU87peK6mqOzOpV8eYktdkLTEkzzD+JsTcxd84ozd8I14+rw==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^7.0.0", - "regjsgen": "^0.4.0", - "regjsparser": "^0.3.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.0.2" - } - }, - "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "regjsgen": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.4.0.tgz", - "integrity": "sha512-X51Lte1gCYUdlwhF28+2YMO0U6WeN0GLpgpA7LK7mbdDnkQYiwvEpmpe0F/cv5L14EbxgrdayAG3JETBv0dbXA==", - "dev": true - }, - "regjsparser": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.3.0.tgz", - "integrity": "sha512-zza72oZBBHzt64G7DxdqrOo/30bhHkwMUoT0WqfGu98XLd7N+1tsy5MJ96Bk4MD0y74n629RhmrGW6XlnLLwCA==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remark": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-9.0.0.tgz", - "integrity": "sha512-amw8rGdD5lHbMEakiEsllmkdBP+/KpjW/PRK6NSGPZKCQowh0BT4IWXDAkRMyG3SB9dKPXWMviFjNusXzXNn3A==", - "dev": true, - "requires": { - "remark-parse": "^5.0.0", - "remark-stringify": "^5.0.0", - "unified": "^6.0.0" - } - }, - "remark-html": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/remark-html/-/remark-html-7.0.0.tgz", - "integrity": "sha512-jqRzkZXCkM12gIY2ibMLTW41m7rfanliMTVQCFTezHJFsbH00YaTox/BX4gU+f/zCdzfhFJONtebFByvpMv37w==", - "dev": true, - "requires": { - "hast-util-sanitize": "^1.0.0", - "hast-util-to-html": "^3.0.0", - "mdast-util-to-hast": "^3.0.0", - "xtend": "^4.0.1" - } - }, - "remark-parse": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz", - "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==", - "dev": true, - "requires": { - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^1.1.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^1.0.0", - "vfile-location": "^2.0.0", - "xtend": "^4.0.1" - } - }, - "remark-reference-links": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/remark-reference-links/-/remark-reference-links-4.0.2.tgz", - "integrity": "sha512-871gKTysBtdQUjoqXA0URWmVhI2jFrpLkWrM3/bydAbsngilDYRjjl2LDAgmNooW8bYbHa57YQ13ld+mYr3TLg==", - "dev": true, - "requires": { - "unist-util-visit": "^1.0.0" - } - }, - "remark-slug": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-5.1.0.tgz", - "integrity": "sha512-FW/V7b3ekfDL1eyPDyzfq0qz5HFPKPNWVC2eqFDie45r774FLGoymOS1oU7LVQfdFNEvNLZ6oBJT/oIxAyBISg==", - "dev": true, - "requires": { - "github-slugger": "^1.0.0", - "mdast-util-to-string": "^1.0.0", - "unist-util-visit": "^1.0.0" - } - }, - "remark-stringify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-5.0.0.tgz", - "integrity": "sha512-Ws5MdA69ftqQ/yhRF9XhVV29mhxbfGhbz0Rx5bQH+oJcNhhSM6nCu1EpLod+DjrFGrU0BMPs+czVmJZU7xiS7w==", - "dev": true, - "requires": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^1.1.0", - "mdast-util-compact": "^1.0.0", - "parse-entities": "^1.0.2", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^1.0.1", - "unherit": "^1.0.4", - "xtend": "^4.0.1" - } - }, - "remark-toc": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/remark-toc/-/remark-toc-5.1.0.tgz", - "integrity": "sha512-G2qPor2XVn6SgtdoKyD3FhhFuzIOOHK9RYVv2PFwk5PxIsNtxeiIuIy3yjGZvgFzrTXBtqpR+sVf9BC9TWSaHg==", - "dev": true, - "requires": { - "mdast-util-toc": "^3.0.0", - "remark-slug": "^5.0.0" - } - }, - "remote-origin-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/remote-origin-url/-/remote-origin-url-0.4.0.tgz", - "integrity": "sha1-TT4pAvNOLTfRwmPYdxC3frQIajA=", - "dev": true, - "requires": { - "parse-git-config": "^0.2.0" - } - }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - } - }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "dev": true, - "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "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.0", - "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.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - } - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - }, - "resolve-bin": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/resolve-bin/-/resolve-bin-0.4.0.tgz", - "integrity": "sha1-RxMiSYkRAa+xmZH+k3ywpfBy5dk=", - "dev": true, - "requires": { - "find-parent-dir": "~0.3.0" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve-global": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-0.1.0.tgz", - "integrity": "sha1-j7As/Vt9sgEY6IYxHxWvlb0V+9k=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0" - } - }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", - "dev": true, - "requires": { - "value-or-function": "^3.0.0" - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rfdc": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz", - "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==", - "dev": true - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "*" - } - }, - "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-json-parse": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", - "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" - }, - "dependencies": { - "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - } - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - } - }, - "semver-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", - "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", - "dev": true - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", - "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", - "dev": true - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shelljs": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz", - "integrity": "sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "shortid": { - "version": "2.2.14", - "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.14.tgz", - "integrity": "sha512-4UnZgr9gDdA1kaKj/38IiudfC3KHKhDc1zi/HSxd9FQDR0VLwH3/y79tZJLsVYPsJgIjeHjqIWaWVRJUj9qZOQ==", - "dev": true, - "requires": { - "nanoid": "^2.0.0" - } - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "simple-git": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.107.0.tgz", - "integrity": "sha512-t4OK1JRlp4ayKRfcW6owrWcRVLyHRUlhGd0uN6ZZTqfDq8a5XpcUdOKiGRNobHEuMtNqzp0vcJNvhYWwh5PsQA==", - "dev": true, - "requires": { - "debug": "^4.0.1" - }, - "dependencies": { - "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - } - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "socket.io": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", - "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", - "dev": true, - "requires": { - "debug": "~3.1.0", - "engine.io": "~3.2.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.1.1", - "socket.io-parser": "~3.2.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", - "dev": true - }, - "socket.io-client": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", - "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.2.0", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "socket.io-parser": { - "version": "3.2.0", - "resolved": "http://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "space-separated-tokens": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.2.tgz", - "integrity": "sha512-G3jprCEw+xFEs0ORweLmblJ3XLymGGr6hxZYTYZjIlvDti9vOBUjRQa1Rzjt012aRrocKstHwdNi+F7HguPsEA==", - "dev": true, - "requires": { - "trim": "0.0.1" - } - }, - "spdx-correct": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", - "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", - "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==", - "dev": true - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "split2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", - "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", - "dev": true, - "requires": { - "through2": "^2.0.2" - } - }, - "sprintf-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.0.tgz", - "integrity": "sha1-z/yvcC2vZeo5u04PorKZzsGhvkY=" - }, - "sshpk": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", - "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - } - } - }, - "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - }, - "state-toggle": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz", - "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stats-webpack-plugin": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/stats-webpack-plugin/-/stats-webpack-plugin-0.7.0.tgz", - "integrity": "sha512-NT0YGhwuQ0EOX+uPhhUcI6/+1Sq/pMzNuSCBVT4GbFl/ac6I/JZefBcjlECNfAb1t3GOx5dEj1Z7x0cAxeeVLQ==", - "dev": true, - "requires": { - "lodash": "^4.17.4" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stream-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/stream-array/-/stream-array-1.1.2.tgz", - "integrity": "sha1-nl9zRfITfDDuO0mLkRToC1K7frU=", - "dev": true, - "requires": { - "readable-stream": "~2.1.0" - }, - "dependencies": { - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "readable-stream": { - "version": "2.1.5", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", - "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", - "dev": true, - "requires": { - "buffer-shims": "^1.0.0", - "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" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dev": true, - "requires": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.0.0.tgz", - "integrity": "sha512-JELJfd+btL9GHtxU3+XXhg9NLYrKFnhybfvRuDghtyVkOFydz3PKNT1df07AMr88qW03WHF+FSV0PySpXignCA==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^3.0.6", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.0.6.tgz", - "integrity": "sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "stream-to-pull-stream": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/stream-to-pull-stream/-/stream-to-pull-stream-1.7.2.tgz", - "integrity": "sha1-dXYJrhzr0zx0MtSvvjH/eGULnd4=", - "requires": { - "looper": "^3.0.0", - "pull-stream": "^3.2.3" - } - }, - "streamroller": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", - "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", - "dev": true, - "requires": { - "date-format": "^1.2.0", - "debug": "^3.1.0", - "mkdirp": "^0.5.1", - "readable-stream": "^2.3.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, - "string-template": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", - "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringify-entities": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", - "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", - "dev": true, - "requires": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-bom-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", - "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", - "dev": true, - "requires": { - "first-chunk-stream": "^1.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, - "strip-url-auth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-url-auth/-/strip-url-auth-1.0.1.tgz", - "integrity": "sha1-IrD6OkE4WzO+PzMVUbu4N/oM164=", - "dev": true - }, - "subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "dev": true, - "requires": { - "minimist": "^1.1.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "dev": true - }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "tapable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.0.tgz", - "integrity": "sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA==", - "dev": true - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - }, - "dependencies": { - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - } - } - }, - "text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "through2-filter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", - "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", - "dev": true, - "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "timed-tape": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/timed-tape/-/timed-tape-0.1.1.tgz", - "integrity": "sha1-m25WnxfmbHnx7tLSX/eWL8dBjkk=" - }, - "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tiny-lr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", - "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", - "dev": true, - "requires": { - "body": "^5.1.0", - "debug": "^3.1.0", - "faye-websocket": "~0.10.0", - "livereload-js": "^2.3.0", - "object-assign": "^4.1.0", - "qs": "^6.4.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", - "dev": true, - "requires": { - "through2": "^2.0.3" - } - }, - "topo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", - "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", - "dev": true, - "requires": { - "hoek": "6.x.x" - } - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "transform-loader": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/transform-loader/-/transform-loader-0.2.4.tgz", - "integrity": "sha1-5ch4d7qW1R0/IlNoWHtG4ibRzsk=", - "dev": true, - "requires": { - "loader-utils": "^1.0.2" - } - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", - "dev": true - }, - "trim-lines": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-1.1.1.tgz", - "integrity": "sha512-X+eloHbgJGxczUk1WSjIvn7aC9oN3jVE3rQfRVKcgpavi3jxtCn0VVKtjOBj64Yop96UYn/ujJRpTbCdAF1vyg==", - "dev": true - }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", - "dev": true - }, - "trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", - "dev": true - }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "trim-trailing-lines": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz", - "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==", - "dev": true - }, - "trough": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.3.tgz", - "integrity": "sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==", - "dev": true - }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", - "dev": true - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.18" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "ua-parser-js": { - "version": "0.7.19", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.19.tgz", - "integrity": "sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ==", - "dev": true - }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "dev": true, - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "uglifyjs-webpack-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz", - "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", - "dev": true, - "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "schema-utils": "^0.4.5", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "uglify-es": "^3.3.4", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "unherit": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz", - "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "xtend": "^4.0.1" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", - "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", - "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==", - "dev": true - }, - "unified": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", - "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", - "dev": true, - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^1.1.0", - "trough": "^1.0.0", - "vfile": "^2.0.0", - "x-is-string": "^0.1.0" - } - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", - "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-stream": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", - "dev": true, - "requires": { - "json-stable-stringify": "^1.0.0", - "through2-filter": "^2.0.0" - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "unist-builder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-1.0.3.tgz", - "integrity": "sha512-/KB8GEaoeHRyIqClL+Kam+Y5NWJ6yEiPsAfv1M+O1p+aKGgjR89WwoEHKTyOj17L6kAlqtKpAgv2nWvdbQDEig==", - "dev": true, - "requires": { - "object-assign": "^4.1.0" - } - }, - "unist-util-generated": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.3.tgz", - "integrity": "sha512-qlPeDqnQnd84KIqwphzOR+l02cxjDzvEYEBl84EjmKRrX4eUmjyAo8xJv1SCDhJqNjyHRnBMZWNKAiBtXE6hBg==", - "dev": true - }, - "unist-util-is": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz", - "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==", - "dev": true - }, - "unist-util-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.2.tgz", - "integrity": "sha512-npmFu92l/+b1Ao6uGP4I1WFz9hsKv7qleZ4aliw6x0RVu6A9A3tAf57NMpFfzQ02jxRtJZuRn+C8xWT7GWnH0g==", - "dev": true - }, - "unist-util-remove-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz", - "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==", - "dev": true, - "requires": { - "unist-util-visit": "^1.1.0" - } - }, - "unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", - "dev": true - }, - "unist-util-visit": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.0.tgz", - "integrity": "sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==", - "dev": true, - "requires": { - "unist-util-visit-parents": "^2.0.0" - } - }, - "unist-util-visit-parents": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz", - "integrity": "sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==", - "dev": true, - "requires": { - "unist-util-is": "^2.1.2" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - }, - "dependencies": { - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - } - } - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "dev": true - }, - "urlgrey": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", - "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "useragent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", - "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", - "dev": true, - "requires": { - "lru-cache": "2.2.x", - "tmp": "0.0.x" - }, - "dependencies": { - "lru-cache": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", - "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", - "dev": true - } - } - }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", - "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", - "dev": true - }, - "vali-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", - "dev": true - }, - "varint": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.0.tgz", - "integrity": "sha1-2Ca4n3SQcy+rwMDtaT7Uddyynr8=" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vfile": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", - "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", - "dev": true, - "requires": { - "is-buffer": "^1.1.4", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" - } - }, - "vfile-location": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.3.tgz", - "integrity": "sha512-zM5/l4lfw1CBoPx3Jimxoc5RNDAHHpk6AM6LM0pTIkm5SUSsx8ZekZ0PVdf0WEZ7kjlhSt7ZlqbRL6Cd6dBs6A==", - "dev": true - }, - "vfile-message": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.1.tgz", - "integrity": "sha512-vSGCkhNvJzO6VcWC6AlJW4NtYOVtS+RgCaqFIYUjoGIlHnFL+i0LbtYvonDWOMcB97uTPT4PRsyYY7REWC9vug==", - "dev": true, - "requires": { - "unist-util-stringify-position": "^1.1.1" - } - }, - "vfile-reporter": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-4.0.0.tgz", - "integrity": "sha1-6m8K4TQvSEFXOYXgX5QXNvJ96do=", - "dev": true, - "requires": { - "repeat-string": "^1.5.0", - "string-width": "^1.0.0", - "supports-color": "^4.1.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-statistics": "^1.1.0" - }, - "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "^2.0.0" - } - } - } - }, - "vfile-sort": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.1.2.tgz", - "integrity": "sha512-KoX1SaGv5CGoIIPHScklExODrVzCFC5Zo0uBM7iQTmd0PtbCswVIQ2cSESUak/dUICNc2lJyDzl9tXEB+4+P/g==", - "dev": true - }, - "vfile-statistics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.1.tgz", - "integrity": "sha512-dxUM6IYvGChHuwMT3dseyU5BHprNRXzAV0OHx1A769lVGsTiT50kU7BbpRFV+IE6oWmU+PwHdsTKfXhnDIRIgQ==", - "dev": true - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "vinyl-fs": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", - "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", - "dev": true, - "requires": { - "duplexify": "^3.2.0", - "glob-stream": "^5.3.2", - "graceful-fs": "^4.0.0", - "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "^0.3.0", - "lazystream": "^1.0.0", - "lodash.isequal": "^4.0.0", - "merge-stream": "^1.0.0", - "mkdirp": "^0.5.0", - "object-assign": "^4.0.0", - "readable-stream": "^2.0.4", - "strip-bom": "^2.0.0", - "strip-bom-stream": "^1.0.0", - "through2": "^2.0.0", - "through2-filter": "^2.0.0", - "vali-date": "^1.0.0", - "vinyl": "^1.0.0" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-stream": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^5.0.3", - "glob-parent": "^3.0.0", - "micromatch": "^2.3.7", - "ordered-read-streams": "^0.3.0", - "through2": "^0.6.0", - "to-absolute-glob": "^0.1.1", - "unique-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "http://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-valid-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", - "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "ordered-read-streams": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", - "dev": true, - "requires": { - "is-stream": "^1.0.1", - "readable-stream": "^2.0.1" - } - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "to-absolute-glob": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", - "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1" - } - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } - } - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", - "dev": true, - "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - } - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, - "vue-template-compiler": { - "version": "2.5.17", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.17.tgz", - "integrity": "sha512-63uI4syCwtGR5IJvZM0LN5tVsahrelomHtCxvRkZPJ/Tf3ADm1U1wG6KWycK3qCfqR+ygM5vewUvmJ0REAYksg==", - "dev": true, - "requires": { - "de-indent": "^1.0.2", - "he": "^1.1.0" - } - }, - "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", - "dev": true, - "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - } - }, - "webpack": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.25.1.tgz", - "integrity": "sha512-T0GU/3NRtO4tMfNzsvpdhUr8HnzA4LTdP2zd+e5zd6CdOH5vNKHnAlO+DvzccfhPdzqRrALOFcjYxx7K5DWmvA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/wasm-edit": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "acorn": "^5.6.2", - "acorn-dynamic-import": "^3.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", - "schema-utils": "^0.4.4", - "tapable": "^1.1.0", - "uglifyjs-webpack-plugin": "^1.2.4", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" - }, - "dependencies": { - "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - } - } - }, - "webpack-bundle-analyzer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.3.tgz", - "integrity": "sha512-naLWiRfmtH4UJgtUktRTLw6FdoZJ2RvCR9ePbwM9aRMsS/KjFerkPZG9epEvXRAw5d5oPdrs9+3p+afNjxW8Xw==", - "dev": true, - "requires": { - "acorn": "^5.7.3", - "bfj": "^6.1.1", - "chalk": "^2.4.1", - "commander": "^2.18.0", - "ejs": "^2.6.1", - "express": "^4.16.3", - "filesize": "^3.6.1", - "gzip-size": "^5.0.0", - "lodash": "^4.17.10", - "mkdirp": "^0.5.1", - "opener": "^1.5.1", - "ws": "^6.0.0" - }, - "dependencies": { - "ws": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.0.tgz", - "integrity": "sha512-H3dGVdGvW2H8bnYpIDc3u3LH8Wue3Qh+Zto6aXXFzvESkTVT6rAfKR6tR/+coaUvxs8yHtmNV0uioBF62ZGSTg==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "webpack-cli": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.1.2.tgz", - "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.0", - "global-modules-path": "^2.3.0", - "import-local": "^2.0.0", - "interpret": "^1.1.0", - "loader-utils": "^1.1.0", - "supports-color": "^5.5.0", - "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.2" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", - "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", - "dev": true, - "requires": { - "memory-fs": "~0.4.1", - "mime": "^2.3.1", - "range-parser": "^1.0.3", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", - "dev": true - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "webpack-merge": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.4.tgz", - "integrity": "sha512-TmSe1HZKeOPey3oy1Ov2iS3guIZjWvMT2BBJDzzT5jScHTjVC3mpjJofgueEzaEd6ibhxRDD6MIblDr8tzh8iQ==", - "dev": true, - "requires": { - "lodash": "^4.17.5" - } - }, - "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", - "dev": true, - "requires": { - "http-parser-js": ">=0.4.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true - }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, - "requires": { - "string-width": "^2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, - "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "x-is-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", - "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", - "dev": true - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=", - "dev": true - }, - "xmlbuilder": { - "version": "8.2.2", - "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", - "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=", - "dev": true - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true - }, - "xregexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", - "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", - "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^2.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^10.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "decamelize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", - "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", - "dev": true, - "requires": { - "xregexp": "4.0.0" - } - }, - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" - } - }, - "os-locale": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz", - "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", - "dev": true, - "requires": { - "execa": "^0.10.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.0.0.tgz", - "integrity": "sha512-dvsafRjM45h79WOTvS/dP35Sb31SlGAKz6tFjI97kGC4MJFBuzTZY6TTYHrz0QSMQdkyd8Y+RsOMLr+JY0nPFQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", - "dev": true - } - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - } - } -} diff --git a/package.json b/package.json index f530bc5..b9b69f3 100644 --- a/package.json +++ b/package.json @@ -33,18 +33,18 @@ }, "homepage": "https://github.com/libp2p/interface-stream-muxer", "dependencies": { - "async": "^2.6.1", + "async": "^2.6.2", "chai": "^4.2.0", "chai-checkmark": "^1.0.1", "detect-node": "^2.0.4", "libp2p-tcp": "~0.13.0", - "multiaddr": "^5.0.2", + "multiaddr": "^6.0.6", "pull-generate": "^2.2.0", "pull-pair": "^1.1.0", "pull-stream": "^3.6.9" }, "devDependencies": { - "aegir": "^17.0.1" + "aegir": "^18.2.2" }, "contributors": [ "David Dias ", From d7f5c2fad28213a1c5d0bd35cf067f0c38b1ec91 Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Fri, 26 Apr 2019 14:03:49 +0100 Subject: [PATCH 279/337] chore: add discourse badge (#19) --- README.md | 6 +++++- package.json | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5556d58..038abab 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,11 @@ interface-peer-routing ===================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) +[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) +[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) +[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) +[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) > A test suite and interface you can use to implement a Peer Routing module for libp2p. diff --git a/package.json b/package.json index dd0926a..04fcf4c 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "homepage": "https://github.com/diasdavid/interface-peer-routing", "devDependencies": {}, "dependencies": { - "peer-id": "~0.8.7", + "peer-id": "~0.12.2", "timed-tape": "^0.1.1" } } From a9c6842386ce66e10a951b35f9add14b2dd041e4 Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Fri, 26 Apr 2019 14:04:21 +0100 Subject: [PATCH 280/337] chore: add discourse badge (#15) --- README.md | 5 ++++- package.json | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index dc86aa0..26320a6 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,10 @@ interface-record-store ===================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) +[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) +[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) +[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) > A test suite and interface you can use to implement a a [IPRS compliant](/IPRS.md) Record Store. diff --git a/package.json b/package.json index 8c1f85e..c66ae37 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,8 @@ "homepage": "https://github.com/libp2p/interface-record-store", "dependencies": { "ecdsa": "~0.7.0", - "ipld": "~0.6.0", - "multihashing": "~0.3.2", + "ipld": "~0.22.0", + "multihashing": "~0.3.3", "timed-tape": "~0.1.1" } } From e4cc841ebda0a1c5d3ccea25eb6b889f90a21e06 Mon Sep 17 00:00:00 2001 From: dirkmc Date: Mon, 29 Apr 2019 17:32:51 +0800 Subject: [PATCH 281/337] chore: fix typos in README (#50) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 43dbb2d..f8f6448 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ describe('compliance', () => { delay (delayMs) { // Add a delay in the connection mechanism for the transport // (this is used by the dial tests) - network.connect = (...args) => setTimeout(() => connect(...args), 100) + network.connect = (...args) => setTimeout(() => connect(...args), delayMs) }, restore () { // Restore the connection mechanism to normal @@ -109,7 +109,7 @@ A valid transport (one that follows the interface defined) must implement the fo ### Creating a transport instance -- `JavaScript` - `var transport = new Transport([options])` +- `JavaScript` - `const transport = new Transport([options])` Creates a new Transport instance. `options` is an optional JavaScript object that should include the necessary parameters for the transport instance. From 030195e3155b3a0515b99c2fa9a81c2418d47a2a Mon Sep 17 00:00:00 2001 From: dirkmc Date: Mon, 29 Apr 2019 23:04:17 +0800 Subject: [PATCH 282/337] revert: "feat: make listen take an array of addrs (#46)" (#51) This reverts commit 1dc5baab0b3efdf5ec07be646b8692700eb4c91c. --- README.md | 6 +++--- package.json | 6 +++--- src/errors.js | 14 +------------- src/listen-test.js | 33 ++++----------------------------- 4 files changed, 11 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index f8f6448..a5821fc 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ A valid transport (one that follows the interface defined) must implement the fo - event: 'close' - event: 'connection' - event: 'error' - - ` listener.listen(Array)` + - ` listener.listen(multiaddr)` - `listener.getAddrs()` - ` listener.close([options])` @@ -173,11 +173,11 @@ The listener object created may emit the following events: ### Start a listener -- `JavaScript` - `await listener.listen(Array)` +- `JavaScript` - `await listener.listen(multiaddr)` This method puts the listener in `listening` mode, waiting for incoming connections. -`Array` is an array of the addresses that the listener should bind to. +`multiaddr` is the address that the listener should bind to. ### Get listener addrs diff --git a/package.json b/package.json index 9bb93b0..4baf103 100644 --- a/package.json +++ b/package.json @@ -34,17 +34,17 @@ }, "homepage": "https://github.com/libp2p/interface-transport", "devDependencies": { - "aegir": "^18.2.2" + "aegir": "^17.0.1", + "dirty-chai": "^2.0.1" }, "dependencies": { "abort-controller": "^3.0.0", "async-iterator-to-pull-stream": "^1.3.0", "chai": "^4.2.0", - "dirty-chai": "^2.0.1", "interface-connection": "~0.3.3", "it-goodbye": "^2.0.0", "it-pipe": "^1.0.0", - "multiaddr": "^6.0.6", + "multiaddr": "^5.0.2", "pull-stream": "^3.6.9", "streaming-iterables": "^4.0.2" }, diff --git a/src/errors.js b/src/errors.js index 74168a9..38609c1 100644 --- a/src/errors.js +++ b/src/errors.js @@ -16,18 +16,6 @@ class AbortError extends Error { } } -class AllListenersFailedError extends Error { - constructor () { - super('All listeners failed to listen on any addresses, please verify the addresses you provided are correct') - this.code = AllListenersFailedError.code - } - - static get code () { - return 'ERR_ALL_LISTENERS_FAILED' - } -} - module.exports = { - AbortError, - AllListenersFailedError + AbortError } diff --git a/src/listen-test.js b/src/listen-test.js index 167abfc..8abdbca 100644 --- a/src/listen-test.js +++ b/src/listen-test.js @@ -8,7 +8,6 @@ const expect = chai.expect chai.use(dirtyChai) const pipe = require('it-pipe') -const { collect } = require('streaming-iterables') module.exports = (common) => { describe('listen', () => { @@ -23,31 +22,7 @@ module.exports = (common) => { it('simple', async () => { const listener = transport.createListener((conn) => {}) - await listener.listen([addrs[0]]) - await listener.close() - }) - - it('listen on multiple addresses', async () => { - // create an echo listener - const listener = transport.createListener((conn) => pipe(conn, conn)) - await listener.listen(addrs.slice(0, 2)) - - // Connect on both addresses - const [socket1, socket2] = await Promise.all([ - transport.dial(addrs[0]), - transport.dial(addrs[1]) - ]) - - const data = Buffer.from('hi there') - const results = await pipe( - [data], // [data] -> socket1 - socket1, // socket1 -> server (echo) -> socket1 -> socket2 - socket2, // socket2 -> server (echo) -> socket2 -> collect - collect - ) - - expect(results).to.eql([data]) - + await listener.listen(addrs[0]) await listener.close() }) @@ -60,7 +35,7 @@ module.exports = (common) => { const listener = transport.createListener((conn) => pipe(conn, conn)) // Listen - await listener.listen([addrs[0]]) + await listener.listen(addrs[0]) // Create two connections to the listener const socket1 = await transport.dial(addrs[0]) @@ -91,7 +66,7 @@ module.exports = (common) => { }) ;(async () => { - await listener.listen([addrs[0]]) + await listener.listen(addrs[0]) await transport.dial(addrs[0]) })() }) @@ -120,7 +95,7 @@ module.exports = (common) => { listener.on('close', done) ;(async () => { - await listener.listen([addrs[0]]) + await listener.listen(addrs[0]) await listener.close() })() }) From ad04ee932ed4ad55bf66a1874ba7bc8b6e7f7137 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Mon, 29 Apr 2019 17:09:53 +0200 Subject: [PATCH 283/337] chore: update deps --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4baf103..0638af5 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ }, "homepage": "https://github.com/libp2p/interface-transport", "devDependencies": { - "aegir": "^17.0.1", + "aegir": "^18.2.2", "dirty-chai": "^2.0.1" }, "dependencies": { @@ -44,7 +44,7 @@ "interface-connection": "~0.3.3", "it-goodbye": "^2.0.0", "it-pipe": "^1.0.0", - "multiaddr": "^5.0.2", + "multiaddr": "^6.0.6", "pull-stream": "^3.6.9", "streaming-iterables": "^4.0.2" }, From cfbfbe48b6a00cc3e1983673cef6468475e30dba Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Mon, 29 Apr 2019 17:11:40 +0200 Subject: [PATCH 284/337] chore: update contributors --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 0638af5..d451234 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.4.0", + "version": "0.5.0", "description": "A test suite and interface you can use to implement a transport.", "leadMaintainer": "Jacob Heun ", "repository": { @@ -56,6 +56,7 @@ "João Santos ", "Maciej Krüger ", "Richard Littauer ", + "Vasco Santos ", "dirkmc ", "dmitriy ryajov ", "greenkeeperio-bot " From 4175c66d4269ee7b7c12f4571976b086cd6d66b8 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Mon, 29 Apr 2019 17:11:41 +0200 Subject: [PATCH 285/337] chore: release version v0.5.0 --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b7dc02..248b4f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ + +# [0.5.0](https://github.com/libp2p/interface-transport/compare/v0.4.0...v0.5.0) (2019-04-29) + + +### Reverts + +* "feat: make listen take an array of addrs ([#46](https://github.com/libp2p/interface-transport/issues/46))" ([#51](https://github.com/libp2p/interface-transport/issues/51)) ([030195e](https://github.com/libp2p/interface-transport/commit/030195e)) + + + # [0.4.0](https://github.com/libp2p/interface-transport/compare/v0.3.7...v0.4.0) (2019-04-19) From f9a7908f753a1fc61271776c876da3a507a63dfa Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Wed, 1 May 2019 13:11:16 +0100 Subject: [PATCH 286/337] fix: move dirty-chai to dependencies (#52) * fix: move dirty-chai to dependencies * chore: test on node 10 License: MIT Signed-off-by: Alan Shaw --- .travis.yml | 2 +- package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 52cd14d..89d4354 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ sudo: false language: node_js node_js: - - "stable" + - "10" before_install: - npm install -g npm diff --git a/package.json b/package.json index d451234..34efde4 100644 --- a/package.json +++ b/package.json @@ -34,13 +34,13 @@ }, "homepage": "https://github.com/libp2p/interface-transport", "devDependencies": { - "aegir": "^18.2.2", - "dirty-chai": "^2.0.1" + "aegir": "^18.2.2" }, "dependencies": { "abort-controller": "^3.0.0", "async-iterator-to-pull-stream": "^1.3.0", "chai": "^4.2.0", + "dirty-chai": "^2.0.1", "interface-connection": "~0.3.3", "it-goodbye": "^2.0.0", "it-pipe": "^1.0.0", From 1e8ea9c2cf85d208bb8da6aaf3f2253f8254c49e Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Wed, 1 May 2019 14:13:15 +0200 Subject: [PATCH 287/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 34efde4..1c6cda6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.5.0", + "version": "0.5.1", "description": "A test suite and interface you can use to implement a transport.", "leadMaintainer": "Jacob Heun ", "repository": { From 68e2791beabf28b2899dc49494f019af05afda49 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Wed, 1 May 2019 14:13:16 +0200 Subject: [PATCH 288/337] chore: release version v0.5.1 --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 248b4f9..3c03601 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ + +## [0.5.1](https://github.com/libp2p/interface-transport/compare/v0.5.0...v0.5.1) (2019-05-01) + + +### Bug Fixes + +* move dirty-chai to dependencies ([#52](https://github.com/libp2p/interface-transport/issues/52)) ([f9a7908](https://github.com/libp2p/interface-transport/commit/f9a7908)) + + + # [0.5.0](https://github.com/libp2p/interface-transport/compare/v0.4.0...v0.5.0) (2019-04-29) From a6d6098ec73f620a8d8422be1832264f69d7ed4b Mon Sep 17 00:00:00 2001 From: dirkmc Date: Tue, 11 Jun 2019 13:16:55 -0400 Subject: [PATCH 289/337] test: add tests for abort after connect (#49) --- src/dial-test.js | 77 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 3 deletions(-) diff --git a/src/dial-test.js b/src/dial-test.js index 11b9dea..d79438d 100644 --- a/src/dial-test.js +++ b/src/dial-test.js @@ -53,7 +53,7 @@ module.exports = (common) => { expect.fail('Did not throw error attempting to connect to non-existent listener') }) - it('cancel before dialing', async () => { + it('abort before dialing throws AbortError', async () => { const controller = new AbortController() controller.abort() const socket = transport.dial(addrs[0], { signal: controller.signal }) @@ -68,8 +68,8 @@ module.exports = (common) => { expect.fail('Did not throw error with code ' + AbortError.code) }) - it('cancel while dialing', async () => { - // Add a delay to connect() so that we can cancel while the dial is in + it('abort while dialing throws AbortError', async () => { + // Add a delay to connect() so that we can abort while the dial is in // progress connector.delay(100) @@ -88,5 +88,76 @@ module.exports = (common) => { } expect.fail('Did not throw error with code ' + AbortError.code) }) + + it('abort while reading throws AbortError', async () => { + // Add a delay to the response from the server + async function * delayedResponse (source) { + for await (const val of source) { + await new Promise((resolve) => setTimeout(resolve, 1000)) + yield val + } + } + const delayedListener = transport.createListener(async (conn) => { + await pipe(conn, delayedResponse, conn) + }) + await delayedListener.listen(addrs[1]) + + // Create an abort signal and dial the socket + const controller = new AbortController() + const socket = await transport.dial(addrs[1], { signal: controller.signal }) + + try { + // Set a timeout to abort before the server responds + setTimeout(() => controller.abort(), 100) + + // An AbortError should be thrown before the pipe completes + const s = goodbye({ source: ['hey'], sink: collect }) + await pipe(s, socket, s) + } catch (err) { + expect(err.code).to.eql(AbortError.code) + expect(err.type).to.eql(AbortError.type) + return + } finally { + await delayedListener.close() + } + expect.fail('Did not throw error with code ' + AbortError.code) + }) + + it('abort while writing does not throw AbortError', async () => { + // Record values received by the listener + const recorded = [] + async function * recorderTransform (source) { + for await (const val of source) { + recorded.push(val) + yield val + } + } + const recordListener = transport.createListener(async (conn) => { + await pipe(conn, recorderTransform, conn) + }) + await recordListener.listen(addrs[1]) + + // Create an abort signal and dial the socket + const controller = new AbortController() + const socket = await transport.dial(addrs[1], { signal: controller.signal }) + + // Set a timeout to abort before writing has completed + setTimeout(() => controller.abort(), 100) + + try { + // The pipe should write to the socket until aborted + await pipe( + async function * () { + yield 'hey' + await new Promise((resolve) => setTimeout(resolve, 200)) + yield 'there' + }, + socket) + expect(recorded.length).to.eql(1) + expect(recorded[0].toString()).to.eql('hey') + } finally { + await recordListener.close() + } + }) }) } From 543125914026d22ce7536162c67d162510d8d405 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Tue, 11 Jun 2019 19:22:13 +0200 Subject: [PATCH 290/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1c6cda6..14671cf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.5.1", + "version": "0.5.2", "description": "A test suite and interface you can use to implement a transport.", "leadMaintainer": "Jacob Heun ", "repository": { From 259fc58622d2206c729bcf78846b9164286c9be4 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Tue, 11 Jun 2019 19:22:13 +0200 Subject: [PATCH 291/337] chore: release version v0.5.2 --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c03601..2adcded 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ + +## [0.5.2](https://github.com/libp2p/interface-transport/compare/v0.5.1...v0.5.2) (2019-06-11) + + + ## [0.5.1](https://github.com/libp2p/interface-transport/compare/v0.5.0...v0.5.1) (2019-05-01) From a5ad120b606356c392c301b05cdbff2a88350bb2 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 6 Sep 2019 09:44:17 +0200 Subject: [PATCH 292/337] feat: add upgrader support to transports (#53) BREAKING CHANGE: Transports must now be passed and use an `Upgrader` instance. See the Readme for usage. Compliance test suites will now need to pass `options` from `common.setup(options)` to their Transport constructor. * docs: update readme to include upgrader * docs: update readme to include MultiaddrConnection ref * feat: add upgrader spy to test suite * test: validate returned value of spy --- README.md | 42 ++++++++++++++++++++++++++++++------------ package.json | 7 ++++--- src/dial-test.js | 34 ++++++++++++++++++++++++++++++++-- src/listen-test.js | 38 +++++++++++++++++++++++++++++++++++--- 4 files changed, 101 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index a5821fc..2c44362 100644 --- a/README.md +++ b/README.md @@ -53,8 +53,8 @@ const YourTransport = require('../src') describe('compliance', () => { tests({ - setup () { - let transport = new YourTransport() + setup (options) { + let transport = new YourTransport(options) const addrs = [ multiaddr('valid-multiaddr-for-your-transport'), @@ -84,10 +84,6 @@ describe('compliance', () => { }) ``` -## Go - -> WIP - # API A valid transport (one that follows the interface defined) must implement the following API: @@ -95,7 +91,7 @@ A valid transport (one that follows the interface defined) must implement the fo **Table of contents:** - type: `Transport` - - `new Transport([options])` + - `new Transport({ upgrader, ...[options] })` - ` transport.dial(multiaddr, [options])` - `transport.createListener([options], handlerFunction)` - type: `transport.Listener` @@ -107,17 +103,39 @@ A valid transport (one that follows the interface defined) must implement the fo - `listener.getAddrs()` - ` listener.close([options])` +### Types + +#### Upgrader +Upgraders have 2 methods: `upgradeOutbound` and `upgradeInbound`. +- `upgradeOutbound` must be called and returned by `transport.dial`. +- `upgradeInbound` must be called and the results must be passed to the `createListener` `handlerFunction` and the `connection` event handler, anytime a new connection is created. + +```js +const connection = await upgrader.upgradeOutbound(multiaddrConnection) +const connection = await upgrader.upgradeInbound(multiaddrConnection) +``` + +The `Upgrader` methods take a [MultiaddrConnection](#multiaddrconnection) and will return an `interface-connection` instance. + +#### MultiaddrConnection + +- `MultiaddrConnection` + - `sink`: A [streaming iterable sink](https://gist.github.com/alanshaw/591dc7dd54e4f99338a347ef568d6ee9#sink-it) + - `source`: A [streaming iterable source](https://gist.github.com/alanshaw/591dc7dd54e4f99338a347ef568d6ee9#source-it) + - `conn`: The raw connection of the transport, such as a TCP socket. + - `remoteAddr`: The remote `Multiaddr` of the connection. + ### Creating a transport instance -- `JavaScript` - `const transport = new Transport([options])` +- `JavaScript` - `const transport = new Transport({ upgrader, ...[options] })` -Creates a new Transport instance. `options` is an optional JavaScript object that should include the necessary parameters for the transport instance. +Creates a new Transport instance. `options` is an JavaScript object that should include the necessary parameters for the transport instance. Options **MUST** include an `Upgrader` instance, as Transports will use this to return `interface-connection` instances from `transport.dial` and the listener `handlerFunction`. **Note: Why is it important to instantiate a transport -** Some transports have state that can be shared between the dialing and listening parts. For example with libp2p-webrtc-star, in order to dial a peer, the peer must be part of some signaling network that is shared with the listener. ### Dial to another peer -- `JavaScript` - `const conn = await transport.dial(multiaddr, [options])` +- `JavaScript` - `const connection = await transport.dial(multiaddr, [options])` This method uses a transport to dial a Peer listening on `multiaddr`. @@ -125,7 +143,7 @@ This method uses a transport to dial a Peer listening on `multiaddr`. `[options]` the options that may be passed to the dial. Must support the `signal` option (see below) -`conn` must implement the [interface-connection](https://github.com/libp2p/interface-connection) interface. +Dial **MUST** call and return `upgrader.upgradeOutbound(multiaddrConnection)`. The upgrader will return an [interface-connection](https://github.com/libp2p/interface-connection) instance. The dial may throw an `Error` instance if there was a problem connecting to the `multiaddr`. @@ -158,7 +176,7 @@ try { - `JavaScript` - `const listener = transport.createListener([options], handlerFunction)` -This method creates a listener on the transport. +This method creates a listener on the transport. Implementations **MUST** call `upgrader.upgradeInbound(multiaddrConnection)` and pass its results to the `handlerFunction` and any emitted `connection` events. `options` is an optional object that contains the properties the listener must have, in order to properly listen on a given transport/socket. diff --git a/package.json b/package.json index 14671cf..cfc10f0 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ }, "homepage": "https://github.com/libp2p/interface-transport", "devDependencies": { - "aegir": "^18.2.2" + "aegir": "^20.0.0" }, "dependencies": { "abort-controller": "^3.0.0", @@ -44,9 +44,10 @@ "interface-connection": "~0.3.3", "it-goodbye": "^2.0.0", "it-pipe": "^1.0.0", - "multiaddr": "^6.0.6", + "multiaddr": "^7.0.0", "pull-stream": "^3.6.9", - "streaming-iterables": "^4.0.2" + "sinon": "^7.4.2", + "streaming-iterables": "^4.1.0" }, "contributors": [ "Alan Shaw ", diff --git a/src/dial-test.js b/src/dial-test.js index d79438d..80d29b6 100644 --- a/src/dial-test.js +++ b/src/dial-test.js @@ -11,8 +11,26 @@ const { collect } = require('streaming-iterables') const pipe = require('it-pipe') const AbortController = require('abort-controller') const AbortError = require('./errors').AbortError +const sinon = require('sinon') module.exports = (common) => { + const upgrader = { + upgradeOutbound (multiaddrConnection) { + ['sink', 'source', 'remoteAddr', 'conn'].forEach(prop => { + expect(multiaddrConnection).to.have.property(prop) + }) + + return { sink: multiaddrConnection.sink, source: multiaddrConnection.source } + }, + upgradeInbound (multiaddrConnection) { + ['sink', 'source', 'remoteAddr', 'conn'].forEach(prop => { + expect(multiaddrConnection).to.have.property(prop) + }) + + return { sink: multiaddrConnection.sink, source: multiaddrConnection.source } + } + } + describe('dial', () => { let addrs let transport @@ -20,7 +38,7 @@ module.exports = (common) => { let listener before(async () => { - ({ addrs, transport, connector } = await common.setup()) + ({ addrs, transport, connector } = await common.setup({ upgrader })) }) after(() => common.teardown && common.teardown()) @@ -30,23 +48,31 @@ module.exports = (common) => { return listener.listen(addrs[0]) }) - afterEach(() => listener.close()) + afterEach(() => { + sinon.restore() + return listener.close() + }) it('simple', async () => { + const upgradeSpy = sinon.spy(upgrader, 'upgradeOutbound') const conn = await transport.dial(addrs[0]) const s = goodbye({ source: ['hey'], sink: collect }) const result = await pipe(s, conn, s) + expect(upgradeSpy.callCount).to.equal(1) + expect(upgradeSpy.returned(conn)).to.equal(true) expect(result.length).to.equal(1) expect(result[0].toString()).to.equal('hey') }) it('to non existent listener', async () => { + const upgradeSpy = sinon.spy(upgrader, 'upgradeOutbound') try { await transport.dial(addrs[1]) } catch (_) { + expect(upgradeSpy.callCount).to.equal(0) // Success: expected an error to be throw return } @@ -54,6 +80,7 @@ module.exports = (common) => { }) it('abort before dialing throws AbortError', async () => { + const upgradeSpy = sinon.spy(upgrader, 'upgradeOutbound') const controller = new AbortController() controller.abort() const socket = transport.dial(addrs[0], { signal: controller.signal }) @@ -61,6 +88,7 @@ module.exports = (common) => { try { await socket } catch (err) { + expect(upgradeSpy.callCount).to.equal(0) expect(err.code).to.eql(AbortError.code) expect(err.type).to.eql(AbortError.type) return @@ -69,6 +97,7 @@ module.exports = (common) => { }) it('abort while dialing throws AbortError', async () => { + const upgradeSpy = sinon.spy(upgrader, 'upgradeOutbound') // Add a delay to connect() so that we can abort while the dial is in // progress connector.delay(100) @@ -80,6 +109,7 @@ module.exports = (common) => { try { await socket } catch (err) { + expect(upgradeSpy.callCount).to.equal(0) expect(err.code).to.eql(AbortError.code) expect(err.type).to.eql(AbortError.type) return diff --git a/src/listen-test.js b/src/listen-test.js index 8abdbca..d90bb00 100644 --- a/src/listen-test.js +++ b/src/listen-test.js @@ -6,20 +6,42 @@ const chai = require('chai') const dirtyChai = require('dirty-chai') const expect = chai.expect chai.use(dirtyChai) +const sinon = require('sinon') const pipe = require('it-pipe') module.exports = (common) => { + const upgrader = { + upgradeOutbound (multiaddrConnection) { + ['sink', 'source', 'remoteAddr', 'conn'].forEach(prop => { + expect(multiaddrConnection).to.have.property(prop) + }) + + return { sink: multiaddrConnection.sink, source: multiaddrConnection.source } + }, + upgradeInbound (multiaddrConnection) { + ['sink', 'source', 'remoteAddr', 'conn'].forEach(prop => { + expect(multiaddrConnection).to.have.property(prop) + }) + + return { sink: multiaddrConnection.sink, source: multiaddrConnection.source } + } + } + describe('listen', () => { let addrs let transport before(async () => { - ({ transport, addrs } = await common.setup()) + ({ transport, addrs } = await common.setup({ upgrader })) }) after(() => common.teardown && common.teardown()) + afterEach(() => { + sinon.restore() + }) + it('simple', async () => { const listener = transport.createListener((conn) => {}) await listener.listen(addrs[0]) @@ -27,12 +49,16 @@ module.exports = (common) => { }) it('close listener with connections, through timeout', async () => { + const upgradeSpy = sinon.spy(upgrader, 'upgradeInbound') let finish - let done = new Promise((resolve) => { + const done = new Promise((resolve) => { finish = resolve }) - const listener = transport.createListener((conn) => pipe(conn, conn)) + const listener = transport.createListener((conn) => { + expect(upgradeSpy.returned(conn)).to.equal(true) + pipe(conn, conn) + }) // Listen await listener.listen(addrs[0]) @@ -53,13 +79,19 @@ module.exports = (common) => { // Pipe should have completed await done + + // 2 dials = 2 connections upgraded + expect(upgradeSpy.callCount).to.equal(2) }) describe('events', () => { it('connection', (done) => { + const upgradeSpy = sinon.spy(upgrader, 'upgradeInbound') const listener = transport.createListener() listener.on('connection', async (conn) => { + expect(upgradeSpy.returned(conn)).to.equal(true) + expect(upgradeSpy.callCount).to.equal(1) expect(conn).to.exist() await listener.close() done() From 2616ae2e109cc7d53be531efd2bdc9c118cb945d Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 6 Sep 2019 10:00:52 +0200 Subject: [PATCH 293/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cfc10f0..892cab4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.5.2", + "version": "0.6.0", "description": "A test suite and interface you can use to implement a transport.", "leadMaintainer": "Jacob Heun ", "repository": { From d143f79ceba771d1b7ec6aa18c0564858c6fac2f Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 6 Sep 2019 10:00:53 +0200 Subject: [PATCH 294/337] chore: release version v0.6.0 --- CHANGELOG.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2adcded..f647929 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,26 @@ + +# [0.6.0](https://github.com/libp2p/interface-transport/compare/v0.5.2...v0.6.0) (2019-09-06) + + +### Features + +* add upgrader support to transports ([#53](https://github.com/libp2p/interface-transport/issues/53)) ([a5ad120](https://github.com/libp2p/interface-transport/commit/a5ad120)) + + +### BREAKING CHANGES + +* Transports must now be passed and use an `Upgrader` instance. See the Readme for usage. Compliance test suites will now need to pass `options` from `common.setup(options)` to their Transport constructor. + +* docs: update readme to include upgrader + +* docs: update readme to include MultiaddrConnection ref + +* feat: add upgrader spy to test suite + +* test: validate returned value of spy + + + ## [0.5.2](https://github.com/libp2p/interface-transport/compare/v0.5.1...v0.5.2) (2019-06-11) From 583f02d47ac319dcb303b3a9e3224d9cabcad0f9 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Mon, 16 Sep 2019 15:58:25 +0200 Subject: [PATCH 295/337] fix(test): close with timeout (#54) * fix(test): allow time for the listener to finish * chore: pre push instead of pre commit chore: clean up git ignore and add docs to list --- .gitignore | 30 +----------------------------- package.json | 2 +- src/listen-test.js | 32 +++++++++++++++----------------- 3 files changed, 17 insertions(+), 47 deletions(-) diff --git a/.gitignore b/.gitignore index e1a7614..fd34c26 100644 --- a/.gitignore +++ b/.gitignore @@ -1,36 +1,8 @@ **/node_modules/ **/*.log -test/repo-tests* package-lock.json -# Logs -logs -*.log - -coverage - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - # Coverage directory used by tools like istanbul coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -build - -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git -node_modules - -lib +docs dist diff --git a/package.json b/package.json index 892cab4..fda7fa4 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "coverage": "exit(0)", "coverage-publish": "exit(0)" }, - "pre-commit": [ + "pre-push": [ "lint" ], "keywords": [ diff --git a/src/listen-test.js b/src/listen-test.js index d90bb00..9754cbd 100644 --- a/src/listen-test.js +++ b/src/listen-test.js @@ -50,10 +50,6 @@ module.exports = (common) => { it('close listener with connections, through timeout', async () => { const upgradeSpy = sinon.spy(upgrader, 'upgradeInbound') - let finish - const done = new Promise((resolve) => { - finish = resolve - }) const listener = transport.createListener((conn) => { expect(upgradeSpy.returned(conn)).to.equal(true) @@ -64,21 +60,23 @@ module.exports = (common) => { await listener.listen(addrs[0]) // Create two connections to the listener - const socket1 = await transport.dial(addrs[0]) - await transport.dial(addrs[0]) + const [socket1] = await Promise.all([ + transport.dial(addrs[0]), + transport.dial(addrs[0]) + ]) - pipe( - [Buffer.from('Some data that is never handled')], - socket1 - ).then(() => { - finish() - }) + // Give the listener a chance to finish its upgrade + await new Promise(resolve => setTimeout(resolve, 0)) - // Closer the listener (will take a couple of seconds to time out) - await listener.close() - - // Pipe should have completed - await done + // Wait for the data send and close to finish + await Promise.all([ + pipe( + [Buffer.from('Some data that is never handled')], + socket1 + ), + // Closer the listener (will take a couple of seconds to time out) + listener.close() + ]) // 2 dials = 2 connections upgraded expect(upgradeSpy.callCount).to.equal(2) From 675037f4bcd4152f081a369fd15d42ed5ce306c6 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Mon, 16 Sep 2019 16:00:18 +0200 Subject: [PATCH 296/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fda7fa4..e556028 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.6.0", + "version": "0.6.1", "description": "A test suite and interface you can use to implement a transport.", "leadMaintainer": "Jacob Heun ", "repository": { From 02fe6d9040a6dbfc496c59cfb5134ea198ca3ab5 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Mon, 16 Sep 2019 16:00:19 +0200 Subject: [PATCH 297/337] chore: release version v0.6.1 --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f647929..0d3c8ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ + +## [0.6.1](https://github.com/libp2p/interface-transport/compare/v0.6.0...v0.6.1) (2019-09-16) + + +### Bug Fixes + +* **test:** close with timeout ([#54](https://github.com/libp2p/interface-transport/issues/54)) ([583f02d](https://github.com/libp2p/interface-transport/commit/583f02d)) + + + # [0.6.0](https://github.com/libp2p/interface-transport/compare/v0.5.2...v0.6.0) (2019-09-06) From dd837ba32656604d333a736a20adff6c42682fbb Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Mon, 16 Sep 2019 16:48:04 +0100 Subject: [PATCH 298/337] refactor: API changes and switch to async await (#55) BREAKING CHANGE: the API is now async / await. See https://github.com/libp2p/interface-stream-muxer/pull/55#issue-275014779 for a summary of the changes. --- .gitignore | 1 + .travis.yml | 1 - README.md | 120 ++++++++++++++++++---- package.json | 16 +-- src/base-test.js | 148 +++++++++++---------------- src/close-test.js | 222 ++++++++++++++++------------------------ src/mega-stress-test.js | 14 +-- src/spawner.js | 130 +++++++++++------------ src/stress-test.js | 71 +++---------- 9 files changed, 339 insertions(+), 384 deletions(-) diff --git a/.gitignore b/.gitignore index fb8d1c9..aadc853 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ build node_modules dist +package-lock.json diff --git a/.travis.yml b/.travis.yml index bec3772..f38be03 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,6 @@ jobs: include: - stage: check script: - - npx aegir commitlint --travis - npx aegir dep-check - npm run lint diff --git a/README.md b/README.md index e01d9b0..59bd9e0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ -interface-stream-muxer -===================== +# interface-stream-muxer [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) [![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) @@ -15,7 +14,7 @@ The primary goal of this module is to enable developers to pick and swap their s Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. -The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. +The API is presented with both Node.js and Go primitives, however, there is no actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through different stacks. ## Lead Maintainer @@ -37,7 +36,7 @@ Include this badge in your readme if you make a new module that uses interface-s ## Usage -### Node.js +### JS Install `interface-stream-muxer` as one of the dependencies of your project and as a test file. Then, using `mocha` (for JavaScript) or a test runner with compatible API, do: @@ -45,11 +44,11 @@ Install `interface-stream-muxer` as one of the dependencies of your project and const test = require('interface-stream-muxer') const common = { - setup (cb) { - cb(null, yourMuxer) + async setup () { + return yourMuxer }, - teardown (cb) { - cb() + async teardown () { + // cleanup } } @@ -63,12 +62,91 @@ test(common) ## API -A valid (read: that follows this abstraction) stream muxer, must implement the following API. +### JS -### Attach muxer to a Connection +A valid (one that follows this abstraction) stream muxer, must implement the following API: -- `JavaScript` muxedConn = muxer(conn, isListener) -- `Go` muxedConn, err := muxer.Attach(conn, isListener) +#### `const muxer = new Muxer([options])` + +Create a new _duplex_ stream that can be piped together with a connection in order to allow multiplexed communications. + +e.g. + +```js +const Muxer = require('your-muxer-module') +const pipe = require('it-pipe') + +// Create a duplex muxer +const muxer = new Muxer() + +// Use the muxer in a pipeline +pipe(conn, muxer, conn) // conn is duplex connection to another peer +``` + +`options` is an optional `Object` that may have the following properties: + +* `onStream` - A function called when receiving a new stream from the remote. e.g. + ```js + // Receive a new stream on the muxed connection + const onStream = stream => { + // Read from this stream and write back to it (echo server) + pipe( + stream, + source => (async function * () { + for await (const data of source) yield data + })() + stream + ) + } + const muxer = new Muxer({ onStream }) + // ... + ``` + **Note:** The `onStream` function can be passed in place of the `options` object. i.e. + ```js + new Mplex(stream => { /* ... */ }) + ``` +* `signal` - An [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) which can be used to abort the muxer, _including_ all of it's multiplexed connections. e.g. + ```js + const controller = new AbortController() + const muxer = new Muxer({ signal: controller.signal }) + + pipe(conn, muxer, conn) + + controller.abort() + ``` +* `maxMsgSize` - The maximum size in bytes the data field of multiplexed messages may contain (default 1MB) + +#### `muxer.onStream` + +Use this property as an alternative to passing `onStream` as an option to the `Muxer` constructor. + +```js +const muxer = new Muxer() +// ...later +muxer.onStream = stream => { /* ... */ } +``` + +#### `const stream = muxer.newStream([options])` + +Initiate a new stream with the remote. Returns a [duplex stream](https://gist.github.com/alanshaw/591dc7dd54e4f99338a347ef568d6ee9#duplex-it). + +e.g. + +```js +// Create a new stream on the muxed connection +const stream = muxer.newStream() + +// Use this new stream like any other duplex stream: +pipe([1, 2, 3], stream, consume) +``` + +### Go + +#### Attach muxer to a Connection + +```go +muxedConn, err := muxer.Attach(conn, isListener) +``` This method attaches our stream muxer to an instance of [Connection](https://github.com/libp2p/interface-connection/blob/master/src/connection.js) defined by [interface-connection](https://github.com/libp2p/interface-connection). @@ -78,22 +156,22 @@ If `err` is passed, no operation should be made in `conn`. `muxedConn` interfaces our established Connection with the other endpoint, it must offer an interface to open a stream inside this connection and to receive incomming stream requests. -### Dial(open/create) a new stream +#### Dial(open/create) a new stream -- `JavaScript` stream = muxedConn.newStream([function (err, stream)]) -- `Go` stream, err := muxedConn.newStream() +```go +stream, err := muxedConn.newStream() +``` This method negotiates and opens a new stream with the other endpoint. If `err` is passed, no operation should be made in `stream`. -`stream` interface our established Stream with the other endpoint, it must implement the [Duplex pull-stream interface](https://pull-stream.github.io) in JavaScript or the [ReadWriteCloser](http://golang.org/pkg/io/#ReadWriteCloser) in Go. +`stream` interface our established Stream with the other endpoint, it must implement the [ReadWriteCloser](http://golang.org/pkg/io/#ReadWriteCloser). -### Listen(wait/accept) a new incoming stream +#### Listen(wait/accept) a new incoming stream -- `JavaScript` muxedConn.on('stream', function (stream) {}) -- `Go` stream := muxedConn.Accept() +```go +stream := muxedConn.Accept() +``` Each time a dialing peer initiates the new stream handshake, a new stream is created on the listening side. - -In JavaScript, the Event Emitter pattern is expected to be used in order to receive new incoming streams, while in Go, it expects to wait when Accept is called. diff --git a/package.json b/package.json index b9b69f3..2d932ac 100644 --- a/package.json +++ b/package.json @@ -33,18 +33,20 @@ }, "homepage": "https://github.com/libp2p/interface-stream-muxer", "dependencies": { - "async": "^2.6.2", + "abort-controller": "^3.0.0", + "abortable-iterator": "^2.1.0", "chai": "^4.2.0", "chai-checkmark": "^1.0.1", "detect-node": "^2.0.4", - "libp2p-tcp": "~0.13.0", - "multiaddr": "^6.0.6", - "pull-generate": "^2.2.0", - "pull-pair": "^1.1.0", - "pull-stream": "^3.6.9" + "it-pair": "^1.0.0", + "it-pipe": "^1.0.1", + "libp2p-tcp": "^0.14.0", + "multiaddr": "^7.1.0", + "p-limit": "^2.2.0", + "streaming-iterables": "^4.1.0" }, "devDependencies": { - "aegir": "^18.2.2" + "aegir": "^20.0.0" }, "contributors": [ "David Dias ", diff --git a/src/base-test.js b/src/base-test.js index 7f50144..01a0e02 100644 --- a/src/base-test.js +++ b/src/base-test.js @@ -3,145 +3,113 @@ const chai = require('chai') chai.use(require('chai-checkmark')) -const expect = chai.expect -const pair = require('pull-pair/duplex') -const pull = require('pull-stream') +const { expect } = chai +const pair = require('it-pair/duplex') +const pipe = require('it-pipe') +const { collect, map, consume } = require('streaming-iterables') -function closeAndWait (stream) { - pull( - pull.empty(), - stream, - pull.onEnd((err) => { - expect(err).to.not.exist.mark() - }) - ) +async function closeAndWait (stream) { + await pipe([], stream, consume) + expect(true).to.be.true.mark() } module.exports = (common) => { describe('base', () => { - let muxer + let Muxer - beforeEach((done) => { - common.setup((err, _muxer) => { - if (err) return done(err) - muxer = _muxer - done() - }) + beforeEach(async () => { + Muxer = await common.setup() }) it('Open a stream from the dialer', (done) => { const p = pair() - const dialer = muxer.dialer(p[0]) - const listener = muxer.listener(p[1]) + const dialer = new Muxer() - expect(4).checks(done) - - listener.on('stream', (stream) => { + const listener = new Muxer(stream => { expect(stream).to.exist.mark() closeAndWait(stream) }) - const conn = dialer.newStream((err) => { - expect(err).to.not.exist.mark() - }) + pipe(p[0], dialer, p[0]) + pipe(p[1], listener, p[1]) + + expect(3).checks(done) + + const conn = dialer.newStream() closeAndWait(conn) }) it('Open a stream from the listener', (done) => { const p = pair() - const dialer = muxer.dialer(p[0]) - const listener = muxer.listener(p[1]) - - expect(4).check(done) - - dialer.on('stream', (stream) => { + const dialer = new Muxer(stream => { expect(stream).to.exist.mark() closeAndWait(stream) }) + const listener = new Muxer() - const conn = listener.newStream((err) => { - expect(err).to.not.exist.mark() - }) + pipe(p[0], dialer, p[0]) + pipe(p[1], listener, p[1]) + + expect(3).check(done) + + const conn = listener.newStream() closeAndWait(conn) }) it('Open a stream on both sides', (done) => { const p = pair() - const dialer = muxer.dialer(p[0]) - const listener = muxer.listener(p[1]) - - expect(8).check(done) - - dialer.on('stream', (stream) => { + const dialer = new Muxer(stream => { + expect(stream).to.exist.mark() + closeAndWait(stream) + }) + const listener = new Muxer(stream => { expect(stream).to.exist.mark() closeAndWait(stream) }) - const listenerConn = listener.newStream((err) => { - expect(err).to.not.exist.mark() - }) + pipe(p[0], dialer, p[0]) + pipe(p[1], listener, p[1]) - listener.on('stream', (stream) => { - expect(stream).to.exist.mark() - closeAndWait(stream) - }) + expect(6).check(done) - const dialerConn = dialer.newStream((err) => { - expect(err).to.not.exist.mark() - }) + const listenerConn = listener.newStream() + const dialerConn = dialer.newStream() closeAndWait(dialerConn) closeAndWait(listenerConn) }) - it('Open a stream on one side, write, open a stream in the other side', (done) => { + it('Open a stream on one side, write, open a stream on the other side', (done) => { + const toString = map(c => c.slice().toString()) const p = pair() - const dialer = muxer.dialer(p[0]) - const listener = muxer.listener(p[1]) - - expect(6).check(done) - - const dialerConn = dialer.newStream((err) => { - expect(err).to.not.exist.mark() - }) - - listener.on('stream', (stream) => { - pull( - stream, - pull.collect((err, chunks) => { - expect(err).to.not.exist.mark() - expect(chunks).to.be.eql([Buffer.from('hey')]).mark() - }) - ) - - dialer.on('stream', onDialerStream) - - const listenerConn = listener.newStream((err) => { - expect(err).to.not.exist.mark() + const dialer = new Muxer() + const listener = new Muxer(stream => { + pipe(stream, toString, collect).then(chunks => { + expect(chunks).to.be.eql(['hey']).mark() }) - pull( - pull.values(['hello']), - listenerConn - ) + dialer.onStream = onDialerStream - function onDialerStream (stream) { - pull( - stream, - pull.collect((err, chunks) => { - expect(err).to.not.exist.mark() - expect(chunks).to.be.eql([Buffer.from('hello')]).mark() - }) - ) + const listenerConn = listener.newStream() + + pipe(['hello'], listenerConn) + + async function onDialerStream (stream) { + const chunks = await pipe(stream, toString, collect) + expect(chunks).to.be.eql(['hello']).mark() } }) - pull( - pull.values(['hey']), - dialerConn - ) + pipe(p[0], dialer, p[0]) + pipe(p[1], listener, p[1]) + + expect(2).check(done) + + const dialerConn = dialer.newStream() + + pipe(['hey'], dialerConn) }) }) } diff --git a/src/close-test.js b/src/close-test.js index 2a64159..9068aca 100644 --- a/src/close-test.js +++ b/src/close-test.js @@ -2,157 +2,117 @@ /* eslint max-nested-callbacks: ["error", 8] */ 'use strict' -const chai = require('chai') -chai.use(require('chai-checkmark')) -const expect = chai.expect -const pair = require('pull-pair/duplex') -const pull = require('pull-stream') -const parallel = require('async/parallel') -const series = require('async/series') +const pair = require('it-pair/duplex') +const pipe = require('it-pipe') +const { consume } = require('streaming-iterables') const Tcp = require('libp2p-tcp') const multiaddr = require('multiaddr') +const abortable = require('abortable-iterator') +const AbortController = require('abort-controller') -const mh = multiaddr('/ip4/127.0.0.1/tcp/10000') +const mh = multiaddr('/ip4/127.0.0.1/tcp/0') -function closeAndWait (stream, callback) { - pull( - pull.empty(), - stream, - pull.onEnd(callback) - ) +function pause (ms) { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function randomBuffer () { + return Buffer.from(Math.random().toString()) +} + +const infiniteRandom = { + [Symbol.asyncIterator]: async function * () { + while (true) { + yield randomBuffer() + await pause(10) + } + } } module.exports = (common) => { describe('close', () => { - let muxer + let Muxer - beforeEach((done) => { - common.setup((err, _muxer) => { - if (err) return done(err) - muxer = _muxer - done() - }) + beforeEach(async () => { + Muxer = await common.setup() }) - it('closing underlying socket closes streams (tcp)', (done) => { - const tcp = new Tcp() - const tcpListener = tcp.createListener((conn) => { - const listener = muxer.listener(conn) - listener.on('stream', (stream) => { - pull(stream, stream) - }) + it('closing underlying socket closes streams (tcp)', async () => { + const mockConn = muxer => ({ + newStream: (...args) => muxer.newStream(...args) }) - // Wait for the streams to open - expect(2).checks(() => { - // Once everything is closed, we're done - expect(3).checks(done) - tcpListener.close((err) => { - expect(err).to.not.exist.mark() - }) - }) - - tcpListener.listen(mh, () => { - const dialerConn = tcp.dial(mh, () => { - const dialerMuxer = muxer.dialer(dialerConn) - const s1 = dialerMuxer.newStream((err) => { - expect(err).to.not.exist.mark() - pull( - s1, - pull.onEnd((err) => { - expect(err).to.exist.mark() - }) - ) - }) - - const s2 = dialerMuxer.newStream((err) => { - expect(err).to.not.exist.mark() - pull( - s2, - pull.onEnd((err) => { - expect(err).to.exist.mark() - }) - ) - }) - }) - }) - }) - - it('closing one of the muxed streams doesn\'t close others', (done) => { - const p = pair() - const dialer = muxer.dialer(p[0]) - const listener = muxer.listener(p[1]) - - expect(6).checks(done) - - const conns = [] - - listener.on('stream', (stream) => { - expect(stream).to.exist.mark() - pull(stream, stream) - }) - - for (let i = 0; i < 5; i++) { - conns.push(dialer.newStream()) + const mockUpgrade = () => maConn => { + const muxer = new Muxer(stream => pipe(stream, stream)) + pipe(maConn, muxer, maConn) + return mockConn(muxer) } - conns.forEach((conn, i) => { - if (i === 1) { - closeAndWait(conn, (err) => { - expect(err).to.not.exist.mark() - }) - } else { - pull( - conn, - pull.onEnd(() => { - throw new Error('should not end') - }) - ) + const mockUpgrader = () => ({ + upgradeInbound: mockUpgrade(), + upgradeOutbound: mockUpgrade() + }) + + const tcp = new Tcp({ upgrader: mockUpgrader() }) + const tcpListener = tcp.createListener() + + await tcpListener.listen(mh) + const dialerConn = await tcp.dial(tcpListener.getAddrs()[0]) + + const s1 = await dialerConn.newStream() + const s2 = await dialerConn.newStream() + + // close the listener in a bit + setTimeout(() => tcpListener.close(), 50) + + const s1Result = pipe(infiniteRandom, s1, consume) + const s2Result = pipe(infiniteRandom, s2, consume) + + // test is complete when all muxed streams have closed + await s1Result + await s2Result + }) + + it('closing one of the muxed streams doesn\'t close others', async () => { + const p = pair() + const dialer = new Muxer() + + // Listener is echo server :) + const listener = new Muxer(stream => pipe(stream, stream)) + + pipe(p[0], dialer, p[0]) + pipe(p[1], listener, p[1]) + + const stream = dialer.newStream() + const streams = Array.from(Array(5), () => dialer.newStream()) + let closed = false + const controllers = [] + + const streamResults = streams.map(async stream => { + const controller = new AbortController() + controllers.push(controller) + + try { + const abortableRand = abortable(infiniteRandom, controller.signal, { abortCode: 'ERR_TEST_ABORT' }) + await pipe(abortableRand, stream, consume) + } catch (err) { + if (err.code !== 'ERR_TEST_ABORT') throw err } + + if (!closed) throw new Error('stream should not have ended yet!') }) - }) - it.skip('closing on spdy doesn\'t close until all the streams that are being muxed are closed', (done) => { - const p = pair() - const dialer = muxer.dial(p[0]) - const listener = muxer.listen(p[1]) + // Pause, and then send some data and close the first stream + await pause(50) + await pipe([randomBuffer()], stream, consume) + closed = true - expect(15).checks(done) + // Abort all the other streams later + await pause(50) + controllers.forEach(c => c.abort()) - const conns = [] - const count = [] - for (let i = 0; i < 5; i++) { - count.push(i) - } - - series(count.map((i) => (cb) => { - parallel([ - (cb) => listener.once('stream', (stream) => { - expect(stream).to.exist.mark() - pull(stream, stream) - cb() - }), - (cb) => conns.push(dialer.newStream(cb)) - ], cb) - }), (err) => { - if (err) return done(err) - - conns.forEach((conn, i) => { - pull( - pull.values([Buffer.from('hello')]), - pull.asyncMap((val, cb) => { - setTimeout(() => { - cb(null, val) - }, i * 10) - }), - conn, - pull.collect((err, data) => { - expect(err).to.not.exist.mark() - expect(data).to.be.eql([Buffer.from('hello')]).mark() - }) - ) - }) - }) + // These should now all resolve without error + await Promise.all(streamResults) }) }) } diff --git a/src/mega-stress-test.js b/src/mega-stress-test.js index be5a74e..b012ea1 100644 --- a/src/mega-stress-test.js +++ b/src/mega-stress-test.js @@ -6,18 +6,12 @@ const spawn = require('./spawner') module.exports = (common) => { describe.skip('mega stress test', function () { this.timeout(100 * 200 * 1000) - let muxer + let Muxer - beforeEach((done) => { - common.setup((err, _muxer) => { - if (err) return done(err) - muxer = _muxer - done() - }) + beforeEach(async () => { + Muxer = await common.setup() }) - it('10000 messages of 10000 streams', (done) => { - spawn(muxer, 10000, 10000, done, 5000) - }) + it('10,000 streams with 10,000 msg', () => spawn(Muxer, 10000, 10000, 5000)) }) } diff --git a/src/spawner.js b/src/spawner.js index 577349e..cf8b787 100644 --- a/src/spawner.js +++ b/src/spawner.js @@ -1,92 +1,82 @@ 'use strict' -const expect = require('chai').expect +const { expect } = require('chai') +const pair = require('it-pair/duplex') +const pipe = require('it-pipe') +const pLimit = require('p-limit') +const { collect, tap, consume } = require('streaming-iterables') -const pair = require('pull-pair/duplex') -const pull = require('pull-stream') -const generate = require('pull-generate') -const each = require('async/each') -const eachLimit = require('async/eachLimit') -const setImmediate = require('async/setImmediate') - -module.exports = (muxer, nStreams, nMsg, done, limit) => { - const p = pair() - const dialerSocket = p[0] - const listenerSocket = p[1] - - const check = marker((6 * nStreams) + (nStreams * nMsg), done) +module.exports = async (Muxer, nStreams, nMsg, limit) => { + const [dialerSocket, listenerSocket] = pair() + const { check, done } = marker((4 * nStreams) + (nStreams * nMsg)) const msg = 'simple msg' - const listener = muxer.listener(listenerSocket) - const dialer = muxer.dialer(dialerSocket) - - listener.on('stream', (stream) => { + const listener = new Muxer(async stream => { expect(stream).to.exist // eslint-disable-line check() - pull( + + await pipe( stream, - pull.through((chunk) => { - expect(chunk).to.exist // eslint-disable-line - check() - }), - pull.onEnd((err) => { - expect(err).to.not.exist // eslint-disable-line - check() - pull(pull.empty(), stream) - }) + tap(chunk => check()), + consume ) + + check() + pipe([], stream) }) - const numbers = [] - for (let i = 0; i < nStreams; i++) { - numbers.push(i) + const dialer = new Muxer() + + pipe(listenerSocket, listener, listenerSocket) + pipe(dialerSocket, dialer, dialerSocket) + + const spawnStream = async n => { + const stream = dialer.newStream() + expect(stream).to.exist // eslint-disable-line + check() + + const res = await pipe( + (function * () { + for (let i = 0; i < nMsg; i++) { + // console.log('n', n, 'msg', i) + yield new Promise(resolve => resolve(msg)) + } + })(), + stream, + collect + ) + + expect(res).to.be.eql([]) + check() } - const spawnStream = (n, cb) => { - const stream = dialer.newStream((err) => { - expect(err).to.not.exist // eslint-disable-line - check() - expect(stream).to.exist // eslint-disable-line - check() - pull( - generate(0, (s, cb) => { - setImmediate(() => { - cb(s === nMsg ? true : null, msg, s + 1) - }) - }), - stream, - pull.collect((err, res) => { - expect(err).to.not.exist // eslint-disable-line - check() - expect(res).to.be.eql([]) - check() - cb() - }) - ) - }) - } + const limiter = pLimit(limit || Infinity) - if (limit) { - eachLimit(numbers, limit, spawnStream, () => {}) - } else { - each(numbers, spawnStream, () => {}) - } + await Promise.all( + Array.from(Array(nStreams), (_, i) => limiter(() => spawnStream(i))) + ) + + return done } -function marker (n, done) { +function marker (n) { + let check let i = 0 - return (err) => { - i++ + const done = new Promise((resolve, reject) => { + check = err => { + i++ - if (err) { - /* eslint-disable-next-line */ - console.error('Failed after %s iterations', i) - return done(err) - } + if (err) { + /* eslint-disable-next-line */ + console.error('Failed after %s iterations', i) + return reject(err) + } - if (i === n) { - done() + if (i === n) { + resolve() + } } - } + }) + return { check, done } } diff --git a/src/stress-test.js b/src/stress-test.js index 6a1125e..f32307b 100644 --- a/src/stress-test.js +++ b/src/stress-test.js @@ -5,63 +5,26 @@ const spawn = require('./spawner') module.exports = (common) => { describe('stress test', () => { - let muxer + let Muxer - beforeEach((done) => { - common.setup((err, _muxer) => { - if (err) return done(err) - muxer = _muxer - done() - }) + beforeEach(async () => { + Muxer = await common.setup() }) - it('1 stream with 1 msg', (done) => { - spawn(muxer, 1, 1, done) - }) - - it('1 stream with 10 msg', (done) => { - spawn(muxer, 1, 10, done) - }) - - it('1 stream with 100 msg', (done) => { - spawn(muxer, 1, 100, done) - }) - - it('10 streams with 1 msg', (done) => { - spawn(muxer, 10, 1, done) - }) - - it('10 streams with 10 msg', (done) => { - spawn(muxer, 10, 10, done) - }) - - it('10 streams with 100 msg', (done) => { - spawn(muxer, 10, 100, done) - }) - - it('100 streams with 1 msg', (done) => { - spawn(muxer, 100, 1, done) - }) - - it('100 streams with 10 msg', (done) => { - spawn(muxer, 100, 10, done) - }) - - it('100 streams with 100 msg', (done) => { - spawn(muxer, 100, 100, done) - }) - - it('1000 streams with 1 msg', (done) => { - spawn(muxer, 1000, 1, done) - }) - - it('1000 streams with 10 msg', (done) => { - spawn(muxer, 1000, 10, done) - }) - - it('1000 streams with 100 msg', function (done) { - this.timeout(80 * 1000) - spawn(muxer, 1000, 100, done) + it('1 stream with 1 msg', () => spawn(Muxer, 1, 1)) + it('1 stream with 10 msg', () => spawn(Muxer, 1, 10)) + it('1 stream with 100 msg', () => spawn(Muxer, 1, 100)) + it('10 streams with 1 msg', () => spawn(Muxer, 10, 1)) + it('10 streams with 10 msg', () => spawn(Muxer, 10, 10)) + it('10 streams with 100 msg', () => spawn(Muxer, 10, 100)) + it('100 streams with 1 msg', () => spawn(Muxer, 100, 1)) + it('100 streams with 10 msg', () => spawn(Muxer, 100, 10)) + it('100 streams with 100 msg', () => spawn(Muxer, 100, 100)) + it('1000 streams with 1 msg', () => spawn(Muxer, 1000, 1)) + it('1000 streams with 10 msg', () => spawn(Muxer, 1000, 10)) + it('1000 streams with 100 msg', function () { + this.timeout(30 * 1000) + return spawn(Muxer, 1000, 100) }) }) } From 732a3838ed903a0c31a61f4a8a41ee76e0d973ee Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Mon, 16 Sep 2019 17:49:23 +0200 Subject: [PATCH 299/337] chore: update contributors --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 2d932ac..8833229 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.6.0", + "version": "0.7.0", "description": "A test suite and interface you can use to implement a stream muxer.", "leadMaintainer": "Jacob Heun ", "main": "src/index.js", @@ -49,12 +49,14 @@ "aegir": "^20.0.0" }, "contributors": [ + "Alan Shaw ", "David Dias ", "David Dias ", "Dmitriy Ryajov ", "Friedel Ziegelmayer ", "Jacob Heun ", "Jeffrey Hulten ", + "Vasco Santos ", "greenkeeperio-bot ", "ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ " ] From d908f8afc28c3770a49bd5eca3ed272b437b75ad Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Mon, 16 Sep 2019 17:49:24 +0200 Subject: [PATCH 300/337] chore: release version v0.7.0 --- CHANGELOG.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7df0e4a..2bdc1c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ + +# [0.7.0](https://github.com/libp2p/interface-stream-muxer/compare/v0.6.0...v0.7.0) (2019-09-16) + + +### Code Refactoring + +* API changes and switch to async await ([#55](https://github.com/libp2p/interface-stream-muxer/issues/55)) ([dd837ba](https://github.com/libp2p/interface-stream-muxer/commit/dd837ba)) + + +### BREAKING CHANGES + +* the API is now async / await. See https://github.com/libp2p/interface-stream-muxer/pull/55#issue-275014779 for a summary of the changes. + + + # [0.6.0](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.9...v0.6.0) (2018-11-13) From 993ca1cb8520f6c2ca8fa95ba7e6c9458fbfdfe5 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Thu, 19 Sep 2019 13:34:25 +0200 Subject: [PATCH 301/337] feat: timeline and close checking (#55) * feat: add test to validate timeline presence * feat: add test and docs for close and timeline * feat: add filter test * docs: dont reference go, it's not relevant --- README.md | 29 +++++++++++++++++++++-------- src/dial-test.js | 28 +++++++++++++++++++--------- src/filter-test.js | 37 +++++++++++++++++++++++++++++++++++++ src/index.js | 2 ++ src/listen-test.js | 26 ++++++++++++++++++-------- src/utils/index.js | 16 ++++++++++++++++ 6 files changed, 113 insertions(+), 25 deletions(-) create mode 100644 src/filter-test.js create mode 100644 src/utils/index.js diff --git a/README.md b/README.md index 2c44362..5c7fe49 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,6 @@ Publishing a test suite as a module lets multiple modules all ensure compatibili The purpose of this interface is not to reinvent any wheels when it comes to dialing and listening to transports. Instead, it tries to provide a uniform API for several transports through a shimmed interface. -The API is presented with both Node.js and Go primitives, however there are no actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. - ## Lead Maintainer [Jacob Heun](https://github.com/jacobheun/) @@ -93,6 +91,7 @@ A valid transport (one that follows the interface defined) must implement the fo - type: `Transport` - `new Transport({ upgrader, ...[options] })` - ` transport.dial(multiaddr, [options])` + - ` transport.filter(multiaddrs)` - `transport.createListener([options], handlerFunction)` - type: `transport.Listener` - event: 'listening' @@ -122,12 +121,17 @@ The `Upgrader` methods take a [MultiaddrConnection](#multiaddrconnection) and wi - `MultiaddrConnection` - `sink`: A [streaming iterable sink](https://gist.github.com/alanshaw/591dc7dd54e4f99338a347ef568d6ee9#sink-it) - `source`: A [streaming iterable source](https://gist.github.com/alanshaw/591dc7dd54e4f99338a347ef568d6ee9#source-it) + - `close`: A method for closing the connection - `conn`: The raw connection of the transport, such as a TCP socket. - `remoteAddr`: The remote `Multiaddr` of the connection. + - `[localAddr]`: An optional local `Multiaddr` of the connection. + - `timeline`: A hash map of connection time events + - `open`: The time in ticks the connection was opened + - `close`: The time in ticks the connection was closed ### Creating a transport instance -- `JavaScript` - `const transport = new Transport({ upgrader, ...[options] })` +- `const transport = new Transport({ upgrader, ...[options] })` Creates a new Transport instance. `options` is an JavaScript object that should include the necessary parameters for the transport instance. Options **MUST** include an `Upgrader` instance, as Transports will use this to return `interface-connection` instances from `transport.dial` and the listener `handlerFunction`. @@ -135,7 +139,7 @@ Creates a new Transport instance. `options` is an JavaScript object that should ### Dial to another peer -- `JavaScript` - `const connection = await transport.dial(multiaddr, [options])` +- `const connection = await transport.dial(multiaddr, [options])` This method uses a transport to dial a Peer listening on `multiaddr`. @@ -172,9 +176,18 @@ try { // ---- ``` +### Filtering Addresses + +- `const supportedAddrs = await transport.filter(multiaddrs)` + +When using a transport its important to be able to filter out `multiaddr`s that the transport doesn't support. A transport instance provides a filter method to return only the valid addresses it supports. + +`multiaddrs` must be an array of type [`multiaddr`](https://www.npmjs.com/multiaddr). +Filter returns an array of `multiaddr`. + ### Create a listener -- `JavaScript` - `const listener = transport.createListener([options], handlerFunction)` +- `const listener = transport.createListener([options], handlerFunction)` This method creates a listener on the transport. Implementations **MUST** call `upgrader.upgradeInbound(multiaddrConnection)` and pass its results to the `handlerFunction` and any emitted `connection` events. @@ -191,7 +204,7 @@ The listener object created may emit the following events: ### Start a listener -- `JavaScript` - `await listener.listen(multiaddr)` +- `await listener.listen(multiaddr)` This method puts the listener in `listening` mode, waiting for incoming connections. @@ -199,13 +212,13 @@ This method puts the listener in `listening` mode, waiting for incoming connecti ### Get listener addrs -- `JavaScript` - `listener.getAddrs()` +- `listener.getAddrs()` This method returns the addresses on which this listener is listening. Useful when listening on port 0 or any interface (0.0.0.0). ### Stop a listener -- `JavaScript` - `await listener.close([options])` +- `await listener.close([options])` This method closes the listener so that no more connections can be opened on this transport instance. diff --git a/src/dial-test.js b/src/dial-test.js index 80d29b6..d6f919c 100644 --- a/src/dial-test.js +++ b/src/dial-test.js @@ -6,6 +6,7 @@ const dirtyChai = require('dirty-chai') const expect = chai.expect chai.use(dirtyChai) +const { isValidTick } = require('./utils') const goodbye = require('it-goodbye') const { collect } = require('streaming-iterables') const pipe = require('it-pipe') @@ -15,19 +16,18 @@ const sinon = require('sinon') module.exports = (common) => { const upgrader = { - upgradeOutbound (multiaddrConnection) { - ['sink', 'source', 'remoteAddr', 'conn'].forEach(prop => { + _upgrade (multiaddrConnection) { + ['sink', 'source', 'remoteAddr', 'conn', 'timeline', 'close'].forEach(prop => { expect(multiaddrConnection).to.have.property(prop) }) - - return { sink: multiaddrConnection.sink, source: multiaddrConnection.source } + expect(isValidTick(multiaddrConnection.timeline.open)).to.equal(true) + return multiaddrConnection + }, + upgradeOutbound (multiaddrConnection) { + return upgrader._upgrade(multiaddrConnection) }, upgradeInbound (multiaddrConnection) { - ['sink', 'source', 'remoteAddr', 'conn'].forEach(prop => { - expect(multiaddrConnection).to.have.property(prop) - }) - - return { sink: multiaddrConnection.sink, source: multiaddrConnection.source } + return upgrader._upgrade(multiaddrConnection) } } @@ -67,6 +67,16 @@ module.exports = (common) => { expect(result[0].toString()).to.equal('hey') }) + it('can close connections', async () => { + const upgradeSpy = sinon.spy(upgrader, 'upgradeOutbound') + const conn = await transport.dial(addrs[0]) + + expect(upgradeSpy.callCount).to.equal(1) + expect(upgradeSpy.returned(conn)).to.equal(true) + await conn.close() + expect(isValidTick(conn.timeline.close)).to.equal(true) + }) + it('to non existent listener', async () => { const upgradeSpy = sinon.spy(upgrader, 'upgradeOutbound') try { diff --git a/src/filter-test.js b/src/filter-test.js new file mode 100644 index 0000000..09c53a3 --- /dev/null +++ b/src/filter-test.js @@ -0,0 +1,37 @@ +/* eslint-env mocha */ +'use strict' + +const chai = require('chai') +const dirtyChai = require('dirty-chai') +const expect = chai.expect +chai.use(dirtyChai) + +module.exports = (common) => { + const upgrader = { + _upgrade (multiaddrConnection) { + return multiaddrConnection + }, + upgradeOutbound (multiaddrConnection) { + return upgrader._upgrade(multiaddrConnection) + }, + upgradeInbound (multiaddrConnection) { + return upgrader._upgrade(multiaddrConnection) + } + } + + describe('filter', () => { + let addrs + let transport + + before(async () => { + ({ addrs, transport } = await common.setup({ upgrader })) + }) + + after(() => common.teardown && common.teardown()) + + it('filters addresses', () => { + const filteredAddrs = transport.filter(addrs) + expect(filteredAddrs).to.eql(addrs) + }) + }) +} diff --git a/src/index.js b/src/index.js index 73f1373..ba9ee98 100644 --- a/src/index.js +++ b/src/index.js @@ -3,11 +3,13 @@ const dial = require('./dial-test') const listen = require('./listen-test') +const filter = require('./filter-test') module.exports = (common) => { describe('interface-transport', () => { dial(common) listen(common) + filter(common) }) } diff --git a/src/listen-test.js b/src/listen-test.js index 9754cbd..a455195 100644 --- a/src/listen-test.js +++ b/src/listen-test.js @@ -9,22 +9,23 @@ chai.use(dirtyChai) const sinon = require('sinon') const pipe = require('it-pipe') +const { isValidTick } = require('./utils') module.exports = (common) => { const upgrader = { - upgradeOutbound (multiaddrConnection) { - ['sink', 'source', 'remoteAddr', 'conn'].forEach(prop => { + _upgrade (multiaddrConnection) { + ['sink', 'source', 'remoteAddr', 'conn', 'timeline', 'close'].forEach(prop => { expect(multiaddrConnection).to.have.property(prop) }) + expect(isValidTick(multiaddrConnection.timeline.open)).to.equal(true) - return { sink: multiaddrConnection.sink, source: multiaddrConnection.source } + return multiaddrConnection + }, + upgradeOutbound (multiaddrConnection) { + return upgrader._upgrade(multiaddrConnection) }, upgradeInbound (multiaddrConnection) { - ['sink', 'source', 'remoteAddr', 'conn'].forEach(prop => { - expect(multiaddrConnection).to.have.property(prop) - }) - - return { sink: multiaddrConnection.sink, source: multiaddrConnection.source } + return upgrader._upgrade(multiaddrConnection) } } @@ -50,8 +51,10 @@ module.exports = (common) => { it('close listener with connections, through timeout', async () => { const upgradeSpy = sinon.spy(upgrader, 'upgradeInbound') + const listenerConns = [] const listener = transport.createListener((conn) => { + listenerConns.push(conn) expect(upgradeSpy.returned(conn)).to.equal(true) pipe(conn, conn) }) @@ -78,6 +81,13 @@ module.exports = (common) => { listener.close() ]) + await socket1.close() + + expect(isValidTick(socket1.timeline.close)).to.equal(true) + listenerConns.forEach(conn => { + expect(isValidTick(conn.timeline.close)).to.equal(true) + }) + // 2 dials = 2 connections upgraded expect(upgradeSpy.callCount).to.equal(2) }) diff --git a/src/utils/index.js b/src/utils/index.js new file mode 100644 index 0000000..b0f3bf1 --- /dev/null +++ b/src/utils/index.js @@ -0,0 +1,16 @@ +'use strict' + +module.exports = { + /** + * A tick is considered valid if it happened between now + * and `ms` milliseconds ago + * @param {number} date Time in ticks + * @param {number} ms max milliseconds that should have expired + * @returns {boolean} + */ + isValidTick: function isValidTick (date, ms = 5000) { + const now = Date.now() + if (date > now - ms && date <= now) return true + return false + } +} From c783da898609eed0002d68418a665dc641977964 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Thu, 19 Sep 2019 13:36:33 +0200 Subject: [PATCH 302/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e556028..fc4779c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.6.1", + "version": "0.7.0", "description": "A test suite and interface you can use to implement a transport.", "leadMaintainer": "Jacob Heun ", "repository": { From c5bcbcf1bb10865404f4f4d27e9ed45c48ec6055 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Thu, 19 Sep 2019 13:36:34 +0200 Subject: [PATCH 303/337] chore: release version v0.7.0 --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d3c8ee..ec01b39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ + +# [0.7.0](https://github.com/libp2p/interface-transport/compare/v0.6.1...v0.7.0) (2019-09-19) + + +### Features + +* timeline and close checking ([#55](https://github.com/libp2p/interface-transport/issues/55)) ([993ca1c](https://github.com/libp2p/interface-transport/commit/993ca1c)) + + + ## [0.6.1](https://github.com/libp2p/interface-transport/compare/v0.6.0...v0.6.1) (2019-09-16) From 0f608322c8ea1a21bd6ddaa0c0e9425731a7670b Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 20 Sep 2019 12:56:18 +0200 Subject: [PATCH 304/337] feat: add onStreamEnd, muxer.streams and timeline (#56) BREAKING CHANGE: This adds new validations to the stream muxer, which will cause existing tests to fail. --- README.md | 29 ++++++++++++++++++++++++++++ src/base-test.js | 50 ++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 73 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 59bd9e0..7d69425 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,14 @@ pipe(conn, muxer, conn) // conn is duplex connection to another peer ```js new Mplex(stream => { /* ... */ }) ``` +* `onStreamEnd` - A function called when a stream ends. + ```js + // Get notified when a stream has ended + const onStreamEnd = stream => { + // Manage any tracking changes, etc + } + const muxer = new Muxer({ onStreamEnd, ... }) + ``` * `signal` - An [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) which can be used to abort the muxer, _including_ all of it's multiplexed connections. e.g. ```js const controller = new AbortController() @@ -126,6 +134,16 @@ const muxer = new Muxer() muxer.onStream = stream => { /* ... */ } ``` +#### `muxer.onStreamEnd` + +Use this property as an alternative to passing `onStreamEnd` as an option to the `Muxer` constructor. + +```js +const muxer = new Muxer() +// ...later +muxer.onStreamEnd = stream => { /* ... */ } +``` + #### `const stream = muxer.newStream([options])` Initiate a new stream with the remote. Returns a [duplex stream](https://gist.github.com/alanshaw/591dc7dd54e4f99338a347ef568d6ee9#duplex-it). @@ -140,6 +158,17 @@ const stream = muxer.newStream() pipe([1, 2, 3], stream, consume) ``` +#### `const streams = muxer.streams` + +The streams property returns an array of streams the muxer currently has open. Closed streams will not be returned. + +```js +muxer.streams.map(stream => { + // Log out the stream's id + console.log(stream.id) +}) +``` + ### Go #### Attach muxer to a Connection diff --git a/src/base-test.js b/src/base-test.js index 01a0e02..f74a64a 100644 --- a/src/base-test.js +++ b/src/base-test.js @@ -8,11 +8,28 @@ const pair = require('it-pair/duplex') const pipe = require('it-pipe') const { collect, map, consume } = require('streaming-iterables') +function close (stream) { + return pipe([], stream, consume) +} + async function closeAndWait (stream) { - await pipe([], stream, consume) + await close(stream) expect(true).to.be.true.mark() } +/** + * A tick is considered valid if it happened between now + * and `ms` milliseconds ago + * @param {number} date Time in ticks + * @param {number} ms max milliseconds that should have expired + * @returns {boolean} + */ +function isValidTick (date, ms = 5000) { + const now = Date.now() + if (date > now - ms && date <= now) return true + return false +} + module.exports = (common) => { describe('base', () => { let Muxer @@ -25,25 +42,44 @@ module.exports = (common) => { const p = pair() const dialer = new Muxer() - const listener = new Muxer(stream => { - expect(stream).to.exist.mark() - closeAndWait(stream) + const listener = new Muxer({ + onStream: stream => { + expect(stream).to.exist.mark() // 1st check + expect(isValidTick(stream.timeline.open)).to.equal(true) + // Make sure the stream is being tracked + expect(listener.streams).to.include(stream) + close(stream) + }, + onStreamEnd: stream => { + expect(stream).to.exist.mark() // 2nd check + expect(listener.streams).to.not.include(stream) + // Make sure the stream is removed from tracking + expect(isValidTick(stream.timeline.close)).to.equal(true) + } }) pipe(p[0], dialer, p[0]) pipe(p[1], listener, p[1]) - expect(3).checks(done) + expect(3).checks(() => { + // ensure we have no streams left + expect(dialer.streams).to.have.length(0) + expect(listener.streams).to.have.length(0) + done() + }) const conn = dialer.newStream() + expect(dialer.streams).to.include(conn) + expect(isValidTick(conn.timeline.open)).to.equal(true) - closeAndWait(conn) + closeAndWait(conn) // 3rd check }) it('Open a stream from the listener', (done) => { const p = pair() const dialer = new Muxer(stream => { expect(stream).to.exist.mark() + expect(isValidTick(stream.timeline.open)).to.equal(true) closeAndWait(stream) }) const listener = new Muxer() @@ -54,6 +90,8 @@ module.exports = (common) => { expect(3).check(done) const conn = listener.newStream() + expect(listener.streams).to.include(conn) + expect(isValidTick(conn.timeline.open)).to.equal(true) closeAndWait(conn) }) From 6e92c95c34e7920d8f3e5acd82c8b5d09148d646 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 20 Sep 2019 12:57:34 +0200 Subject: [PATCH 305/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8833229..e4fb95b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.7.0", + "version": "0.8.0", "description": "A test suite and interface you can use to implement a stream muxer.", "leadMaintainer": "Jacob Heun ", "main": "src/index.js", From d8f7774277394fa88305eb8ad1117088a61aad0b Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 20 Sep 2019 12:57:34 +0200 Subject: [PATCH 306/337] chore: release version v0.8.0 --- CHANGELOG.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bdc1c2..178d557 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ + +# [0.8.0](https://github.com/libp2p/interface-stream-muxer/compare/v0.7.0...v0.8.0) (2019-09-20) + + +### Features + +* add onStreamEnd, muxer.streams and timeline ([#56](https://github.com/libp2p/interface-stream-muxer/issues/56)) ([0f60832](https://github.com/libp2p/interface-stream-muxer/commit/0f60832)) + + +### BREAKING CHANGES + +* This adds new validations to the stream muxer, which will cause existing tests to fail. + + + # [0.7.0](https://github.com/libp2p/interface-stream-muxer/compare/v0.6.0...v0.7.0) (2019-09-16) From e690d28e0dc6a2e2b253254b36da717f419e4add Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Thu, 26 Sep 2019 11:27:39 +0200 Subject: [PATCH 307/337] refactor: async --- .gitignore | 40 +++-------------------- .travis.yml | 10 ++++++ README.md | 33 ++++++++++--------- package.json | 35 ++++++++++++-------- src/index.js | 32 ++++++++++++++++++ test/{index.js => peer-discovery.spec.js} | 0 6 files changed, 87 insertions(+), 63 deletions(-) create mode 100644 .travis.yml create mode 100644 src/index.js rename test/{index.js => peer-discovery.spec.js} (100%) diff --git a/.gitignore b/.gitignore index 1be92c3..fd34c26 100644 --- a/.gitignore +++ b/.gitignore @@ -1,38 +1,8 @@ -dist -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov +**/node_modules/ +**/*.log +package-lock.json # Coverage directory used by tools like istanbul coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules -jspm_packages - -# Optional npm cache directory -.npm - -# Optional REPL history -.node_repl_history +docs +dist diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..68ade7c --- /dev/null +++ b/.travis.yml @@ -0,0 +1,10 @@ +language: node_js +cache: npm +stages: + - check + +node_js: + - '10' + +script: + - npm run lint diff --git a/README.md b/README.md index 91995a2..7e29b93 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ The API is presented with both Node.js and Go primitives, however, there is not ## Modules that implement the interface - [JavaScript libp2p-mdns](https://github.com/libp2p/js-libp2p-mdns) -- [JavaScript libp2p-railing](https://github.com/libp2p/js-libp2p-railing) +- [JavaScript libp2p-bootstrap](https://github.com/libp2p/js-libp2p-bootstrap) - [JavaScript libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht) - [JavaScript libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) - [JavaScript libp2p-websocket-star](https://github.com/libp2p/js-libp2p-websocket-star) @@ -44,11 +44,11 @@ Install `interface-peer-discovery` as one of the dependencies of your project an const test = require('interface-peer-discovery') const common = { - setup (cb) { - cb(null, yourMuxer) + setup () { + return YourDiscovery }, - teardown (cb) { - cb() + teardown () { + // Clean up any resources created by setup() } } @@ -56,25 +56,28 @@ const common = { test(common) ``` -### Go - -> WIP - go-libp2p does not have a test suite available for Peer Discovery yet. - ## API A valid (read: that follows this abstraction) Peer Discovery module must implement the following API: ### `start` the service -- `JavaScript` discovery.start(callback) -- `Go` NA +- `await discovery.start()` + +Start the discovery service. + +It returns a `Promise` ### `stop` the service -- `JavaScript` discovery.stop(callback) -- `Go` NA +- `await discovery.stop()` + +Stop the discovery service. + +It returns a `Promise` ### discoverying peers -- `JavaScript` discovery.on('peer', function (peerInfo) {}) -- `Go` NA +- `discovery.on('peer', (peerInfo) => {})` + +Everytime a peer is discovered by a discovery service, it emmits a `peer` event with the discover peer's [PeerInfo](https://github.com/libp2p/js-peer-info). diff --git a/package.json b/package.json index 3482b9a..70f51a7 100644 --- a/package.json +++ b/package.json @@ -5,22 +5,29 @@ "leadMaintainer": "Vasco Santos ", "main": "src/index.js", "scripts": { - "lint": "aegir-lint", - "build": "aegir-build", - "test": "exit 0", - "release": "aegir-release", - "release-minor": "aegir-release --type minor", - "release-major": "aegir-release --type major" + "lint": "aegir lint", + "test": "aegir test", + "build": "aegir build", + "release": "aegir release --no-test", + "release-minor": "aegir release --type minor --no-test", + "release-major": "aegir release --type major --no-test", + "coverage": "exit(0)", + "coverage-publish": "exit(0)" }, - "pre-commit": [ - "lint", - "test" + "pre-push": [ + "lint" ], "repository": { "type": "git", "url": "https://github.com/libp2p/interface-peer-discovery.git" }, "keywords": [ + "libp2p", + "network", + "p2p", + "peer", + "discovery", + "peer-to-peer", "IPFS" ], "author": "David Dias ", @@ -31,13 +38,15 @@ "homepage": "https://github.com/libp2p/interface-peer-discovery", "dependencies": {}, "devDependencies": { - "aegir": "^18.2.2" + "aegir": "^20.3.1", + "chai": "^4.2.0", + "dirty-chai": "^2.0.1" }, "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" + "node": ">=10.0.0", + "npm": ">=6.0.0" }, "contributors": [ "David Dias " ] -} \ No newline at end of file +} diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..5b00fbd --- /dev/null +++ b/src/index.js @@ -0,0 +1,32 @@ +/* eslint-env mocha */ +'use strict' + +module.exports = (common) => { + describe('interface-peer-discovery', () => { + let discovery + + before(() => { + discovery = common.setup() + }) + + after(() => common.teardown && common.teardown()) + + it('can start the service', async () => { + await discovery.start() + }) + + it('can start and stop the service', async () => { + await discovery.start() + await discovery.stop() + }) + + it('should not fail to stop the service if it was not started', async () => { + await discovery.stop() + }) + + it('should not fail to start the service if it is already started', async () => { + await discovery.start() + await discovery.start() + }) + }) +} diff --git a/test/index.js b/test/peer-discovery.spec.js similarity index 100% rename from test/index.js rename to test/peer-discovery.spec.js From bf5c646441d26873f7ce9dada5699fb1048f2d5e Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Fri, 27 Sep 2019 11:13:02 +0200 Subject: [PATCH 308/337] refactor: API changes and switch to async iterators (#29) BREAKING CHANGE: all the callbacks in the provided API were removed and each function uses async/await. Additionally, pull-streams are no longer being used. See the README for new usage. --- .travis.yml | 24 +++- README.md | 272 +++++++++++++++++++++++++++++++--------- package.json | 28 +++-- src/connection.js | 222 ++++++++++++++++++++++++++------ src/tests.js | 9 ++ test/base-test.js | 10 -- test/compliance.spec.js | 59 +++++++++ test/connection.js | 135 ++++++++++++++++++++ test/index.js | 8 -- test/utils/peers.js | 27 ++++ 10 files changed, 665 insertions(+), 129 deletions(-) create mode 100644 src/tests.js delete mode 100644 test/base-test.js create mode 100644 test/compliance.spec.js create mode 100644 test/connection.js delete mode 100644 test/index.js create mode 100644 test/utils/peers.js diff --git a/.travis.yml b/.travis.yml index bec3772..c7f74c1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,17 +2,39 @@ language: node_js cache: npm stages: - check + - test + - cov node_js: - '10' + - '12' + +os: + - linux + - osx + - windows + +script: npx nyc -s npm run test:node -- --bail +after_success: npx nyc report --reporter=text-lcov > coverage.lcov && npx codecov jobs: include: - stage: check script: - - npx aegir commitlint --travis - npx aegir dep-check - npm run lint + - stage: test + name: chrome + addons: + chrome: stable + script: npx aegir test -t browser -t webworker + + - stage: test + name: firefox + addons: + firefox: latest + script: npx aegir test -t browser -t webworker -- --browsers FirefoxHeadless + notifications: email: false diff --git a/README.md b/README.md index 8c23307..a6b8246 100644 --- a/README.md +++ b/README.md @@ -10,101 +10,253 @@ interface-connection [![Dependency Status](https://david-dm.org/libp2p/interface-connection.svg?style=flat-square)](https://david-dm.org/libp2p/interface-connection) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) -This is a test suite and interface you can use to implement a connection. A connection is understood as something that offers mechanism for writing and reading data, back pressure, half and full duplex streams. This module and test suite were heavily inspired by abstract-blob-store and interface-stream-muxer. +This is a test suite and interface you can use to implement a connection. The connection interface contains all the metadata associated with it, as well as an array of the streams opened through this connection. In the same way as the connection, a stream contains properties with its metadata, plus an iterable duplex object that offers a mechanism for writing and reading data, with back pressure. This module and test suite were heavily inspired by abstract-blob-store and interface-stream-muxer. The primary goal of this module is to enable developers to pick, swap or upgrade their connection without losing the same API expectations and mechanisms such as back pressure and the ability to half close a connection. -Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. - -The API is presented with both Node.js and Go primitives, however, there is no actual limitations for it to be extended to any other language, pushing forward the cross compatibility and interop through diferent stacks. +Publishing a test suite as a module lets multiple modules ensure compatibility since they use the same test suite. ## Lead Maintainer [Jacob Heun](https://github.com/jacobheun/) -# Modules that implement the interface +## Usage -- [js-libp2p-tcp](https://github.com/libp2p/js-libp2p-tcp) -- [js-libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) -- [js-libp2p-websockets](https://github.com/libp2p/js-libp2p-websockets) -- [js-libp2p-utp](https://github.com/libp2p/js-libp2p-utp) -- [webrtc-explorer](https://github.com/diasdavid/webrtc-explorer) -- [js-libp2p-spdy](https://github.com/libp2p/js-libp2p-spdy) -- [js-libp2p-multiplex](https://github.com/libp2p/js-libp2p-multiplex) -- [js-libp2p-secio](https://github.com/libp2p/js-libp2p-secio) +### Connection -# Badge +Before creating a connection from a transport compatible with `libp2p` it is important to understand some concepts: -Include this badge in your readme if you make a module that is compatible with the interface-connection API. You can validate this by running the tests. +- **socket**: the underlying raw duplex connection between two nodes. It is created by the transports during a dial/listen. +- **[multiaddr connection](https://github.com/libp2p/interface-transport#multiaddrconnection)**: an abstraction over the socket to allow it to work with multiaddr addresses. It is a duplex connection that transports create to wrap the socket before passing to an upgrader that turns it into a standard connection (see below). +- **connection**: a connection between two _peers_ that has built in multiplexing and info about the connected peer. It is created from a [multiaddr connection](https://github.com/libp2p/interface-transport#multiaddrconnection) by an upgrader. The upgrader uses multistream-select to add secio and multiplexing and returns this object. +- **stream**: a muxed duplex channel of the `connection`. Each connection may have many streams. -![](https://raw.githubusercontent.com/diasdavid/interface-connection/master/img/badge.png) +A connection stands for the libp2p communication duplex layer between two nodes. It is **not** the underlying raw transport duplex layer (socket), such as a TCP socket, but an abstracted layer that sits on top of the raw socket. -# How to use the battery of tests +This helps ensuring that the transport is responsible for socket management, while also allowing the application layer to handle the connection management. -## Node.js +### Test suite -``` -var tape = require('tape') -var tests = require('interface-connection/tests') -var YourConnectionHandler = require('../src') +#### JS -var common = { - setup: function (t, cb) { - cb(null, YourConnectionHandler) - }, - teardown: function (t, cb) { - cb() - } -} - -tests(tape, common) +```js +describe('your connection', () => { + require('interface-connection/src/tests')({ + async setup () { + return YourConnection + }, + async teardown () { + // cleanup resources created by setup() + } + }) +}) ``` -## Go +#### Go > WIP -# API +## API -A valid (read: that follows this abstraction) connection, must implement the following API. +### Connection -**Table of contents:** +A valid connection (one that follows this abstraction), must implement the following API: - type: `Connection` - - `conn.getObservedAddrs(callback)` - - `conn.getPeerInfo(callback)` - - `conn.setPeerInfo(peerInfo)` - - `...` +```js +new Connection({ + localAddr, + remoteAddr, + localPeer, + remotePeer, + newStream, + close, + getStreams, + stat: { + direction, + timeline: { + open, + upgraded + }, + multiplexer, + encryption + } +}) +``` + - ` conn.localAddr` + - ` conn.remoteAddr` + - ` conn.localPeer` + - ` conn.remotePeer` + - ` conn.stat` + - ` conn.registry` + - `Array conn.streams` + - `Promise conn.newStream(Array)` + - ` conn.removeStream(id)` + - ` conn.addStream(stream, protocol, metadata)` + - `Promise<> conn.close()` -### Get the Observed Addresses of the peer in the other end +It can be obtained as follows: -- `JavaScript` - `conn.getObservedAddrs(callback)` +```js +const { Connection } = require('interface-connection') -This method retrieves the observed addresses we get from the underlying transport, if any. +const conn = new Connection({ + localAddr: maConn.localAddr, + remoteAddr: maConn.remoteAddr, + localPeer: this._peerId, + remotePeer, + newStream, + close: err => maConn.close(err), + getStreams, + stats: { + direction: 'outbound', + timeline: { + open: maConn.timeline.open, + upgraded: Date.now() + }, + multiplexer, + encryption + } +}) +``` -`callback` should follow the follow `function (err, multiaddrs) {}`, where `multiaddrs` is an array of [multiaddr](https://github.com/multiformats/multiaddr). +#### Creating a connection instance -### Get the PeerInfo +- `JavaScript` - `const conn = new Connection({localAddr, remoteAddr, localPeer, remotePeer, newStream, close, getStreams, direction, multiplexer, encryption})` -- `JavaScript` - `conn.getPeerInfo(callback)` +Creates a new Connection instance. -This method retrieves the a Peer Info object that contains information about the peer that this conn connects to. +`localAddr` is the [multiaddr](https://github.com/multiformats/multiaddr) address used by the local peer to reach the remote. +`remoteAddr` is the [multiaddr](https://github.com/multiformats/multiaddr) address used to communicate with the remote peer. +`localPeer` is the [PeerId](https://github.com/libp2p/js-peer-id) of the local peer. +`remotePeer` is the [PeerId](https://github.com/libp2p/js-peer-id) of the remote peer. +`newStream` is the `function` responsible for getting a new muxed+multistream-selected stream. +`close` is the `function` responsible for closing the raw connection. +`getStreams` is the `function` responsible for getting the streams muxed within the connection. +`stats` is an `object` with the metadata of the connection. It contains: +- `direction` is a `string` indicating whether the connection is `inbound` or `outbound`. +- `timeline` is an `object` with the relevant events timestamps of the connection (`open`, `upgraded` and `closed`; the `closed` will be added when the connection is closed). +- `multiplexer` is a `string` with the connection multiplexing codec (optional). +- `encryption` is a `string` with the connection encryption method identifier (optional). -`callback` should follow the `function (err, peerInfo) {}` signature, where peerInfo is a object of type [Peer Info](https://github.com/libp2p/js-peer-info) +#### Create a new stream -### Set the PeerInfo +- `JavaScript` - `conn.newStream(protocols)` -- `JavaScript` - `conn.setPeerInfo(peerInfo)` -j -This method stores a reference to the peerInfo Object that contains information about the peer that this conn connects to. +Create a new stream within the connection. -`peerInfo` is a object of type [Peer Info](https://github.com/diasdavid/js-peer-info) +`protocols` is an array of the intended protocol to use (by order of preference). Example: `[/echo/1.0.0]` ---- +It returns a `Promise` with an object with the following properties: -notes: - - should follow the remaining Duplex stream operations - - should have backpressure into account - - should enable half duplex streams (close from one side, but still open for the other) - - should support full duplex - - tests should be performed by passing two streams +```js +{ + stream, + protocol +} +``` + +The stream property contains the muxed stream, while the protocol contains the protocol codec used by the stream. + +#### Add stream metadata + +- `JavaScript` - `conn.addStream(stream, { protocol, ...metadata })` + +Add a new stream to the connection registry. + +`stream` is a muxed stream. +`protocol` is the string codec for the protocol used by the stream. Example: `/echo/1.0.0` +`metadata` is an object containing any additional, optional, stream metadata that you wish to track (such as its `tags`). + +#### Remove a from the registry + +- `JavaScript` - `conn.removeStream(id)` + +Removes the stream with the given id from the connection registry. + +`id` is the unique id of the stream for this connection. + + +#### Close connection + +- `JavaScript` - `conn.close()` + +This method closes the connection to the remote peer, as well as all the streams muxed within the connection. + +It returns a `Promise`. + +#### Connection identifier + +- `JavaScript` - `conn.id` + +This property contains the identifier of the connection. + +#### Connection streams registry + +- `JavaScript` - `conn.registry` + +This property contains a map with the muxed streams indexed by their id. This registry contains the protocol used by the stream, as well as its metadata. + +#### Remote peer + +- `JavaScript` - `conn.remotePeer` + +This property contains the remote `peer-id` of this connection. + +#### Local peer + +- `JavaScript` - `conn.localPeer` + +This property contains the local `peer-id` of this connection. + +#### Get the connection Streams + +- `JavaScript` - `conn.streams` + +This getter returns all the muxed streams within the connection. + +It returns an `Array`. + +#### Remote address + +- `JavaScript` - `conn.remoteAddr` + +This getter returns the `remote` [multiaddr](https://github.com/multiformats/multiaddr) address. + +#### Local address + +- `JavaScript` - `conn.localAddr` + +This getter returns the `local` [multiaddr](https://github.com/multiformats/multiaddr) address. + +#### Stat + +- `JavaScript` - `conn.stat` + +This getter returns an `Object` with the metadata of the connection, as follows: + +- `status`: + +This property contains the status of the connection. It can be either `open`, `closing` or `closed`. Once the connection is created it is in an `open` status. When a `conn.close()` happens, the status will change to `closing` and finally, after all the connection streams are properly closed, the status will be `closed`. + +- `timeline`: + +This property contains an object with the `open`, `upgraded` and `close` timestamps of the connection. Note that, the `close` timestamp is `undefined` until the connection is closed. + +- `direction`: + +This property contains the direction of the peer in the connection. It can be `inbound` or `outbound`. + +- `multiplexer`: + +This property contains the `multiplexing` codec being used in the connection. + +- `encryption`: + +This property contains the encryption method being used in the connection. It is `undefined` if the connection is not encrypted. + +#### Tags + +- `JavaScript` - `conn.tags` + +This property contains an array of tags associated with the connection. New tags can be pushed to this array during the connection's lifetime. diff --git a/package.json b/package.json index 30a2859..a9e2d6b 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,14 @@ "scripts": { "lint": "aegir lint", "build": "aegir build", - "test": "node -e 'process.exit()'", - "release": "aegir release --no-test", - "release-minor": "aegir release --type minor --no-test", - "release-major": "aegir release --type major --no-test" + "test": "aegir test", + "test:node": "aegir test -t node", + "test:browser": "aegir test -t browser -t webworker", + "release": "aegir release", + "release-minor": "aegir release --type minor", + "release-major": "aegir release --type major" }, - "pre-commit": [ + "pre-push": [ "lint" ], "repository": { @@ -32,14 +34,22 @@ }, "homepage": "https://github.com/libp2p/interface-connection", "dependencies": { - "pull-defer": "~0.2.3" + "abortable-iterator": "^2.1.0", + "chai": "^4.2.0", + "class-is": "^1.1.0", + "dirty-chai": "^2.0.1", + "err-code": "^2.0.0", + "multiaddr": "^7.1.0", + "peer-id": "~0.13.2" }, "devDependencies": { - "aegir": "^18.2.2", - "timed-tape": "~0.1.1" + "aegir": "^20.2.0", + "it-pair": "^1.0.0", + "it-pipe": "^1.0.1", + "mocha": "^6.2.0" }, "engines": { - "node": ">=8.0.0", + "node": ">=10.0.0", "npm": ">=6.0.0" }, "contributors": [ diff --git a/src/connection.js b/src/connection.js index 02f2786..77e9ecb 100644 --- a/src/connection.js +++ b/src/connection.js @@ -1,60 +1,200 @@ 'use strict' -const defer = require('pull-defer/duplex') +const PeerId = require('peer-id') +const multiaddr = require('multiaddr') -module.exports = class Connection { - constructor (conn, info) { - this.peerInfo = null - this.conn = defer() +const withIs = require('class-is') - if (conn) { - this.setInnerConn(conn, info) - } else if (info) { - this.info = info +const assert = require('assert') +const errCode = require('err-code') + +/** + * An implementation of the js-libp2p connection. + * Any libp2p transport should use an upgrader to return this connection. + */ +class Connection { + /** + * Creates an instance of Connection. + * @param {object} properties properties of the connection. + * @param {multiaddr} properties.localAddr local multiaddr of the connection. + * @param {multiaddr} properties.remoteAddr remote multiaddr of the connection. + * @param {PeerId} properties.localPeer local peer-id. + * @param {PeerId} properties.remotePeer remote peer-id. + * @param {function} properties.newStream new stream muxer function. + * @param {function} properties.close close raw connection function. + * @param {function} properties.getStreams get streams from muxer function. + * @param {object} properties.stat metadata of the connection. + * @param {string} properties.stat.direction connection establishment direction ("inbound" or "outbound"). + * @param {object} properties.stat.timeline connection relevant events timestamp. + * @param {string} properties.stat.timeline.open connection opening timestamp. + * @param {string} properties.stat.timeline.upgraded connection upgraded timestamp. + * @param {string} [properties.stat.multiplexer] connection multiplexing identifier. + * @param {string} [properties.stat.encryption] connection encryption method identifier. + */ + constructor ({ localAddr, remoteAddr, localPeer, remotePeer, newStream, close, getStreams, stat }) { + assert(multiaddr.isMultiaddr(localAddr), 'localAddr must be an instance of multiaddr') + assert(multiaddr.isMultiaddr(remoteAddr), 'remoteAddr must be an instance of multiaddr') + assert(PeerId.isPeerId(localPeer), 'localPeer must be an instance of peer-id') + assert(PeerId.isPeerId(remotePeer), 'remotePeer must be an instance of peer-id') + assert(typeof newStream === 'function', 'new stream must be a function') + assert(typeof close === 'function', 'close must be a function') + assert(typeof getStreams === 'function', 'getStreams must be a function') + assert(stat, 'connection metadata object must be provided') + assert(stat.direction === 'inbound' || stat.direction === 'outbound', 'direction must be "inbound" or "outbound"') + assert(stat.timeline, 'connection timeline object must be provided in the stat object') + assert(stat.timeline.open, 'connection open timestamp must be provided') + assert(stat.timeline.upgraded, 'connection upgraded timestamp must be provided') + + /** + * Connection identifier. + */ + this.id = (parseInt(Math.random() * 1e9)).toString(36) + Date.now() + + /** + * Observed multiaddr of the local peer + */ + this.localAddr = localAddr + + /** + * Observed multiaddr of the remote peer + */ + this.remoteAddr = remoteAddr + + /** + * Local peer id. + */ + this.localPeer = localPeer + + /** + * Remote peer id. + */ + this.remotePeer = remotePeer + + /** + * Connection metadata. + */ + this._stat = { + ...stat, + timeline: { + ...stat.timeline, + close: undefined + }, + status: 'open' + } + + /** + * Reference to the new stream function of the multiplexer + */ + this._newStream = newStream + + /** + * Reference to the close function of the raw connection + */ + this._close = close + + /** + * Reference to the getStreams function of the muxer + */ + this._getStreams = getStreams + + /** + * Connection streams registry + */ + this.registry = new Map() + + /** + * User provided tags + */ + this.tags = [] + } + + /** + * Get connection metadata + * @return {Object} + */ + get stat () { + return this._stat + } + + /** + * Get all the streams of the muxer. + * @return {Array<*>} + */ + get streams () { + return this._getStreams() + } + + /** + * Create a new stream from this connection + * @param {string[]} protocols intended protocol for the stream + * @return {Promise} with muxed+multistream-selected stream and selected protocol + */ + async newStream (protocols) { + if (this.stat.status === 'closing') { + throw errCode(new Error('the connection is being closed'), 'ERR_CONNECTION_BEING_CLOSED') + } + + if (this.stat.status === 'closed') { + throw errCode(new Error('the connection is closed'), 'ERR_CONNECTION_CLOSED') + } + + if (!Array.isArray(protocols)) protocols = [protocols] + + const { stream, protocol } = await this._newStream(protocols) + + this.addStream(stream, protocol) + + return { + stream, + protocol } } - get source () { - return this.conn.source + /** + * Add a stream when it is opened to the registry. + * @param {*} muxedStream a muxed stream + * @param {object} properties the stream properties to be registered + * @param {string} properties.protocol the protocol used by the stream + * @param {object} properties.metadata metadata of the stream + * @return {void} + */ + addStream (muxedStream, { protocol, metadata = {} }) { + // Add metadata for the stream + this.registry.set(muxedStream.id, { + protocol, + ...metadata + }) } - get sink () { - return this.conn.sink + /** + * Remove stream registry after it is closed. + * @param {string} id identifier of the stream + */ + removeStream (id) { + this.registry.delete(id) } - getPeerInfo (callback) { - if (this.info && this.info.getPeerInfo) { - return this.info.getPeerInfo(callback) + /** + * Close the connection. + * @return {Promise} + */ + async close () { + if (this.stat.status === 'closed') { + return } - if (!this.peerInfo) { - return callback(new Error('Peer Info not set yet')) + if (this._closing) { + return this._closing } - callback(null, this.peerInfo) - } + this.stat.status = 'closing' - setPeerInfo (peerInfo) { - if (this.info && this.info.setPeerInfo) { - return this.info.setPeerInfo(peerInfo) - } + // Close raw connection + this._closing = await this._close() - this.peerInfo = peerInfo - } - - getObservedAddrs (callback) { - if (this.info && this.info.getObservedAddrs) { - return this.info.getObservedAddrs(callback) - } - callback(null, []) - } - - setInnerConn (conn, info) { - this.conn.resolve(conn) - if (info) { - this.info = info - } else { - this.info = conn - } + this._stat.timeline.close = Date.now() + this.stat.status = 'closed' } } + +module.exports = withIs(Connection, { className: 'Connection', symbolName: '@libp2p/interface-connection/connection' }) diff --git a/src/tests.js b/src/tests.js new file mode 100644 index 0000000..8a80dae --- /dev/null +++ b/src/tests.js @@ -0,0 +1,9 @@ +/* eslint-env mocha */ + +'use strict' + +const connectionSuite = require('../test/connection') + +module.exports = (test) => { + connectionSuite(test) +} diff --git a/test/base-test.js b/test/base-test.js deleted file mode 100644 index b3f0a78..0000000 --- a/test/base-test.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict' - -module.exports.all = function (test, common) { - test('a test', function (t) { - common.setup(test, function (err, conn) { - t.ifError(err) - t.end() - }) - }) -} diff --git a/test/compliance.spec.js b/test/compliance.spec.js new file mode 100644 index 0000000..e2b9b4d --- /dev/null +++ b/test/compliance.spec.js @@ -0,0 +1,59 @@ +/* eslint-env mocha */ +'use strict' + +const tests = require('../src/tests') +const Connection = require('../src/connection') +const peers = require('./utils/peers') +const PeerId = require('peer-id') +const multiaddr = require('multiaddr') +const pair = require('it-pair') + +describe('compliance tests', () => { + tests({ + async setup () { + const localAddr = multiaddr('/ip4/127.0.0.1/tcp/8080') + const remoteAddr = multiaddr('/ip4/127.0.0.1/tcp/8081') + const [localPeer, remotePeer] = await Promise.all([ + PeerId.createFromJSON(peers[0]), + PeerId.createFromJSON(peers[1]) + ]) + const openStreams = [] + let streamId = 0 + + return new Connection({ + localPeer, + remotePeer, + localAddr, + remoteAddr, + stat: { + timeline: { + open: Date.now() - 10, + upgraded: Date.now() + }, + direction: 'outbound', + encryption: '/secio/1.0.0', + multiplexer: '/mplex/6.7.0' + }, + newStream: (protocols) => { + const id = streamId++ + const stream = pair() + + stream.close = () => stream.sink([]) + stream.id = id + + openStreams.push(stream) + + return { + stream, + protocol: protocols[0] + } + }, + close: () => {}, + getStreams: () => openStreams + }) + }, + async teardown () { + // cleanup resources created by setup() + } + }) +}) diff --git a/test/connection.js b/test/connection.js new file mode 100644 index 0000000..feb388e --- /dev/null +++ b/test/connection.js @@ -0,0 +1,135 @@ +/* eslint-env mocha */ + +'use strict' + +const chai = require('chai') +const expect = chai.expect +chai.use(require('dirty-chai')) + +module.exports = (test) => { + describe('connection', () => { + describe('open connection', () => { + let connection + + beforeEach(async () => { + connection = await test.setup() + if (!connection) throw new Error('missing connection') + }) + + afterEach(async () => { + await connection.close() + await test.teardown() + }) + + it('should have properties set', () => { + expect(connection.id).to.exist() + expect(connection.localPeer).to.exist() + expect(connection.remotePeer).to.exist() + expect(connection.localAddr).to.exist() + expect(connection.remoteAddr).to.exist() + expect(connection.stat.status).to.equal('open') + expect(connection.stat.timeline.open).to.exist() + expect(connection.stat.timeline.upgraded).to.exist() + expect(connection.stat.timeline.close).to.not.exist() + expect(connection.stat.direction).to.exist() + expect(connection.streams).to.eql([]) + expect(connection.tags).to.eql([]) + }) + + it('should get the metadata of an open connection', () => { + const stat = connection.stat + + expect(stat.status).to.equal('open') + expect(stat.direction).to.exist() + expect(stat.timeline.open).to.exist() + expect(stat.timeline.upgraded).to.exist() + expect(stat.timeline.close).to.not.exist() + }) + + it('should return an empty array of streams', () => { + const streams = connection.streams + + expect(streams).to.eql([]) + }) + + it('should be able to create a new stream', async () => { + const protocolToUse = '/echo/0.0.1' + const { stream, protocol } = await connection.newStream(protocolToUse) + + expect(protocol).to.equal(protocolToUse) + + const connStreams = await connection.streams + + expect(stream).to.exist() + expect(connStreams).to.exist() + expect(connStreams).to.have.lengthOf(1) + expect(connStreams[0]).to.equal(stream) + }) + }) + + describe('close connection', () => { + let connection + + beforeEach(async () => { + connection = await test.setup() + if (!connection) throw new Error('missing connection') + }) + + afterEach(async () => { + await test.teardown() + }) + + it('should be able to close the connection after being created', async () => { + expect(connection.stat.timeline.close).to.not.exist() + await connection.close() + + expect(connection.stat.timeline.close).to.exist() + expect(connection.stat.status).to.equal('closed') + }) + + it('should be able to close the connection after opening a stream', async () => { + // Open stream + const protocol = '/echo/0.0.1' + await connection.newStream(protocol) + + // Close connection + expect(connection.stat.timeline.close).to.not.exist() + await connection.close() + + expect(connection.stat.timeline.close).to.exist() + expect(connection.stat.status).to.equal('closed') + }) + + it('should fail to create a new stream if the connection is closing', async () => { + expect(connection.stat.timeline.close).to.not.exist() + connection.close() + + try { + const protocol = '/echo/0.0.1' + await connection.newStream(protocol) + } catch (err) { + expect(err).to.exist() + return + } + + throw new Error('should fail to create a new stream if the connection is closing') + }) + + it('should fail to create a new stream if the connection is closed', async () => { + expect(connection.stat.timeline.close).to.not.exist() + await connection.close() + + try { + const protocol = '/echo/0.0.1' + await connection.newStream(protocol) + } catch (err) { + expect(err).to.exist() + expect(err.code).to.equal('ERR_CONNECTION_CLOSED') + return + } + + throw new Error('should fail to create a new stream if the connection is closing') + }) + }) + }) +} diff --git a/test/index.js b/test/index.js deleted file mode 100644 index 5438379..0000000 --- a/test/index.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict' - -var timed = require('timed-tape') - -module.exports = function (test, common) { - test = timed(test) - require('./base-test.js').all(test, common) -} diff --git a/test/utils/peers.js b/test/utils/peers.js new file mode 100644 index 0000000..fad0d23 --- /dev/null +++ b/test/utils/peers.js @@ -0,0 +1,27 @@ +'use strict' + +module.exports = [{ + id: 'QmNMMAqSxPetRS1cVMmutW5BCN1qQQyEr4u98kUvZjcfEw', + privKey: 'CAASpQkwggShAgEAAoIBAQDPek2aeHMa0blL42RTKd6xgtkk4Zkldvq4LHxzcag5uXepiQzWANEUvoD3KcUTmMRmx14PvsxdLCNst7S2JSa0R2n5wSRs14zGy6892lx4H4tLBD1KSpQlJ6vabYM1CJhIQRG90BtzDPrJ/X1iJ2HA0PPDz0Mflam2QUMDDrU0IuV2m7gSCJ5r4EmMs3U0xnH/1gShkVx4ir0WUdoWf5KQUJOmLn1clTRHYPv4KL9A/E38+imNAXfkH3c2T7DrCcYRkZSpK+WecjMsH1dCX15hhhggNqfp3iulO1tGPxHjm7PDGTPUjpCWKpD5e50sLqsUwexac1ja6ktMfszIR+FPAgMBAAECggEAB2H2uPRoRCAKU+T3gO4QeoiJaYKNjIO7UCplE0aMEeHDnEjAKC1HQ1G0DRdzZ8sb0fxuIGlNpFMZv5iZ2ZFg2zFfV//DaAwTek9tIOpQOAYHUtgHxkj5FIlg2BjlflGb+ZY3J2XsVB+2HNHkUEXOeKn2wpTxcoJE07NmywkO8Zfr1OL5oPxOPlRN1gI4ffYH2LbfaQVtRhwONR2+fs5ISfubk5iKso6BX4moMYkxubYwZbpucvKKi/rIjUA3SK86wdCUnno1KbDfdXSgCiUlvxt/IbRFXFURQoTV6BOi3sP5crBLw8OiVubMr9/8WE6KzJ0R7hPd5+eeWvYiYnWj4QKBgQD6jRlAFo/MgPO5NZ/HRAk6LUG+fdEWexA+GGV7CwJI61W/Dpbn9ZswPDhRJKo3rquyDFVZPdd7+RlXYg1wpmp1k54z++L1srsgj72vlg4I8wkZ4YLBg0+zVgHlQ0kxnp16DvQdOgiRFvMUUMEgetsoIx1CQWTd67hTExGsW+WAZQKBgQDT/WaHWvwyq9oaZ8G7F/tfeuXvNTk3HIJdfbWGgRXB7lJ7Gf6FsX4x7PeERfL5a67JLV6JdiLLVuYC2CBhipqLqC2DB962aKMvxobQpSljBBZvZyqP1IGPoKskrSo+2mqpYkeCLbDMuJ1nujgMP7gqVjabs2zj6ACKmmpYH/oNowJ/T0ZVtvFsjkg+1VsiMupUARRQuPUWMwa9HOibM1NIZcoQV2NGXB5Z++kR6JqxQO0DZlKArrviclderUdY+UuuY4VRiSEprpPeoW7ZlbTku/Ap8QZpWNEzZorQDro7bnfBW91fX9/81ets/gCPGrfEn+58U3pdb9oleCOQc/ifpQKBgBTYGbi9bYbd9vgZs6bd2M2um+VFanbMytS+g5bSIn2LHXkVOT2UEkB+eGf9KML1n54QY/dIMmukA8HL1oNAyalpw+/aWj+9Ui5kauUhGEywHjSeBEVYM9UXizxz+m9rsoktLLLUI0o97NxCJzitG0Kub3gn0FEogsUeIc7AdinZAoGBANnM1vcteSQDs7x94TDEnvvqwSkA2UWyLidD2jXgE0PG4V6tTkK//QPBmC9eq6TIqXkzYlsErSw4XeKO91knFofmdBzzVh/ddgx/NufJV4tXF+a2iTpqYBUJiz9wpIKgf43/Ob+P1EA99GAhSdxz1ess9O2aTqf3ANzn6v6g62Pv', + pubKey: 'CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPek2aeHMa0blL42RTKd6xgtkk4Zkldvq4LHxzcag5uXepiQzWANEUvoD3KcUTmMRmx14PvsxdLCNst7S2JSa0R2n5wSRs14zGy6892lx4H4tLBD1KSpQlJ6vabYM1CJhIQRG90BtzDPrJ/X1iJ2HA0PPDz0Mflam2QUMDDrU0IuV2m7gSCJ5r4EmMs3U0xnH/1gShkVx4ir0WUdoWf5KQUJOmLn1clTRHYPv4KL9A/E38+imNAXfkH3c2T7DrCcYRkZSpK+WecjMsH1dCX15hhhggNqfp3iulO1tGPxHjm7PDGTPUjpCWKpD5e50sLqsUwexac1ja6ktMfszIR+FPAgMBAAE=' +}, { + id: 'QmW8rAgaaA6sRydK1k6vonShQME47aDxaFidbtMevWs73t', + privKey: 'CAASpwkwggSjAgEAAoIBAQCTU3gVDv3SRXLOsFln9GEf1nJ/uCEDhOG10eC0H9l9IPpVxjuPT1ep+ykFUdvefq3D3q+W3hbmiHm81o8dYv26RxZIEioToUWp7Ec5M2B/niYoE93za9/ZDwJdl7eh2hNKwAdxTmdbXUPjkIU4vLyHKRFbJIn9X8w9djldz8hoUvC1BK4L1XrT6F2l0ruJXErH2ZwI1youfSzo87TdXIoFKdrQLuW6hOtDCGKTiS+ab/DkMODc6zl8N47Oczv7vjzoWOJMUJs1Pg0ZsD1zmISY38P0y/QyEhatZn0B8BmSWxlLQuukatzOepQI6k+HtfyAAjn4UEqnMaXTP1uwLldVAgMBAAECggEAHq2f8MqpYjLiAFZKl9IUs3uFZkEiZsgx9BmbMAb91Aec+WWJG4OLHrNVTG1KWp+IcaQablEa9bBvoToQnS7y5OpOon1d066egg7Ymfmv24NEMM5KRpktCNcOSA0CySpPIB6yrg6EiUr3ixiaFUGABKkxmwgVz/Q15IqM0ZMmCUsC174PMAz1COFZxD0ZX0zgHblOJQW3dc0X3XSzhht8vU02SMoVObQHQfeXEHv3K/RiVj/Ax0bTc5JVkT8dm8xksTtsFCNOzRBqFS6MYqX6U/u0Onz3Jm5Jt7fLWb5n97gZR4SleyGrqxYNb46d9X7mP0ie7E6bzFW0DsWBIeAqVQKBgQDW0We2L1n44yOvJaMs3evpj0nps13jWidt2I3RlZXjWzWHiYQfvhWUWqps/xZBnAYgnN/38xbKzHZeRNhrqOo+VB0WK1IYl0lZVE4l6TNKCsLsUfQzsb1pePkd1eRZA+TSqsi+I/IOQlQU7HA0bMrah/5FYyUBP0jYvCOvYTlZuwKBgQCvkcVRydVlzjUgv7lY5lYvT8IHV5iYO4Qkk2q6Wjv9VUKAJZauurMdiy05PboWfs5kbETdwFybXMBcknIvZO4ihxmwL8mcoNwDVZHI4bXapIKMTCyHgUKvJ9SeTcKGC7ZuQJ8mslRmYox/HloTOXEJgQgPRxXcwa3amzvdZI+6LwKBgQCLsnQqgxKUi0m6bdR2qf7vzTH4258z6X34rjpT0F5AEyF1edVFOz0XU/q+lQhpNEi7zqjLuvbYfSyA026WXKuwSsz7jMJ/oWqev/duKgAjp2npesY/E9gkjfobD+zGgoS9BzkyhXe1FCdP0A6L2S/1+zg88WOwMvJxl6/xLl24XwKBgCm60xSajX8yIQyUpWBM9yUtpueJ2Xotgz4ST+bVNbcEAddll8gWFiaqgug9FLLuFu5lkYTHiPtgc1RNdphvO+62/9MRuLDixwh/2TPO+iNqwKDKJjda8Nei9vVddCPaOtU/xNQ0xLzFJbG9LBmvqH9izOCcu8SJwGHaTcNUeJj/AoGADCJ26cY30c13F/8awAAmFYpZWCuTP5ppTsRmjd63ixlrqgkeLGpJ7kYb5fXkcTycRGYgP0e1kssBGcmE7DuG955fx3ZJESX3GQZ+XfMHvYGONwF1EiK1f0p6+GReC2VlQ7PIkoD9o0hojM6SnWvv9EXNjCPALEbfPFFvcniKVsE=', + pubKey: 'CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCTU3gVDv3SRXLOsFln9GEf1nJ/uCEDhOG10eC0H9l9IPpVxjuPT1ep+ykFUdvefq3D3q+W3hbmiHm81o8dYv26RxZIEioToUWp7Ec5M2B/niYoE93za9/ZDwJdl7eh2hNKwAdxTmdbXUPjkIU4vLyHKRFbJIn9X8w9djldz8hoUvC1BK4L1XrT6F2l0ruJXErH2ZwI1youfSzo87TdXIoFKdrQLuW6hOtDCGKTiS+ab/DkMODc6zl8N47Oczv7vjzoWOJMUJs1Pg0ZsD1zmISY38P0y/QyEhatZn0B8BmSWxlLQuukatzOepQI6k+HtfyAAjn4UEqnMaXTP1uwLldVAgMBAAE=' +}, { + id: 'QmZqCdSzgpsmB3Qweb9s4fojAoqELWzqku21UVrqtVSKi4', + privKey: 'CAASpgkwggSiAgEAAoIBAQCdbSEsTmw7lp5HagRcx57DaLiSUEkh4iBcKc7Y+jHICEIA8NIVi9FlfGEZj9G21FpiTR4Cy+BLVEuf8Nm90bym4iV+cSumeS21fvD8xGTEbeKGljs6OYHy3M45JhWF85gqHQJOqZufI2NRDuRgMZEO2+qGEXmSlv9mMXba/+9ecze8nSpB7bG2Z2pnKDeYwhF9Cz+ElMyn7TBWDjJERGVgFbTpdM3rBnbhB/TGpvs732QqZmIBlxnDb/Jn0l1gNZCgkEDcJ/0NDMBJTQ8vbvcdmaw3eaMPLkn1ix4wdu9QWCA0IBtuY1R7vSUtf4irnLJG7DnAw2GfM5QrF3xF1GLXAgMBAAECggEAQ1N0qHoxl5pmvqv8iaFlqLSUmx5y6GbI6CGJMQpvV9kQQU68yjItr3VuIXx8d/CBZyEMAK4oko7OeOyMcr3MLKLy3gyQWnXgsopDjhZ/8fH8uwps8g2+IZuFJrO+6LaxEPGvFu06fOiphPUVfn40R2KN/iBjGeox+AaXijmCqaV2vEdNJJPpMfz6VKZBDLTrbiqvo/3GN1U99PUqfPWpOWR29oAhh/Au6blSqvqTUPXB2+D/X6e1JXv31mxMPK68atDHSUjZWKB9lE4FMK1bkSKJRbyXmNIlbZ9V8X4/0r8/6T7JnW7ZT8ugRkquohmwgG7KkDXB1YsOCKXYUqzVYQKBgQDtnopFXWYl7XUyePJ/2MA5i7eoko9jmF44L31irqmHc5unNf6JlNBjlxTNx3WyfzhUzrn3c18psnGkqtow0tkBj5hmqn8/WaPbc5UA/5R1FNaNf8W5khn7MDm6KtYRPjN9djqTDiVHyC6ljONYd+5S+MqyKVWZ3t/xvG60sw85qwKBgQCpmpDtL+2JBwkfeUr3LyDcQxvbfzcv8lXj2otopWxWiLiZF1HzcqgAa2CIwu9kCGEt9Zr+9E4uINbe1To0b01/FhvR6xKO/ukceGA/mBB3vsKDcRmvpBUp+3SmnhY0nOk+ArQl4DhJ34k8pDM3EDPrixPf8SfVdU/8IM32lsdHhQKBgHLgpvCKCwxjFLnmBzcPzz8C8TOqR3BbBZIcQ34l+wflOGdKj1hsfaLoM8KYn6pAHzfBCd88A9Hg11hI0VuxVACRL5jS7NnvuGwsIOluppNEE8Ys86aXn7/0vLPoab3EWJhbRE48FIHzobmft3nZ4XpzlWs02JGfUp1IAC2UM9QpAoGAeWy3pZhSr2/iEC5+hUmwdQF2yEbj8+fDpkWo2VrVnX506uXPPkQwE1zM2Bz31t5I9OaJ+U5fSpcoPpDaAwBMs1fYwwlRWB8YNdHY1q6/23svN3uZsC4BGPV2JnO34iMUudilsRg+NGVdk5TbNejbwx7nM8Urh59djFzQGGMKeSECgYA0QMCARPpdMY50Mf2xQaCP7HfMJhESSPaBq9V3xY6ToEOEnXgAR5pNjnU85wnspHp+82r5XrKfEQlFxGpj2YA4DRRmn239sjDa29qP42UNAFg1+C3OvXTht1d5oOabaGhU0udwKmkEKUbb0bG5xPQJ5qeSJ5T1gLzLk3SIP0GlSw==', + pubKey: 'CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCdbSEsTmw7lp5HagRcx57DaLiSUEkh4iBcKc7Y+jHICEIA8NIVi9FlfGEZj9G21FpiTR4Cy+BLVEuf8Nm90bym4iV+cSumeS21fvD8xGTEbeKGljs6OYHy3M45JhWF85gqHQJOqZufI2NRDuRgMZEO2+qGEXmSlv9mMXba/+9ecze8nSpB7bG2Z2pnKDeYwhF9Cz+ElMyn7TBWDjJERGVgFbTpdM3rBnbhB/TGpvs732QqZmIBlxnDb/Jn0l1gNZCgkEDcJ/0NDMBJTQ8vbvcdmaw3eaMPLkn1ix4wdu9QWCA0IBtuY1R7vSUtf4irnLJG7DnAw2GfM5QrF3xF1GLXAgMBAAE=' +}, { + id: 'QmR5VwgsL7jyfZHAGyp66tguVrQhCRQuRc3NokocsCZ3fA', + privKey: 'CAASpwkwggSjAgEAAoIBAQCGXYU+uc2nn1zuJhfdFOl34upztnrD1gpHu58ousgHdGlGgYgbqLBAvIAauXdEL0+e30HofjA634SQxE+9nV+0FQBam1DDzHQlXsuwHV+2SKvSDkk4bVllMFpu2SJtts6VH+OXC/2ANJOm+eTALykQPYXgLIBxrhp/eD+Jz5r6wW2nq3k6OmYyK/4pgGzFjo5UyX+fa/171AJ68UPboFpDy6BZCcUjS0ondxPvD7cv5jMNqqMKIB/7rpi8n+Q3oeccRqVL56wH+FE3/QLjwYHwY6ILNRyvNXRqHjwBEXB2R5moXN0AFUWTw9rt3KhFiEjR1U81BTw5/xS7W2Iu0FgZAgMBAAECggEAS64HK8JZfE09eYGJNWPe8ECmD1C7quw21BpwVe+GVPSTizvQHswPohbKDMNj0srXDMPxCnNw1OgqcaOwyjsGuZaOoXoTroTM8nOHRIX27+PUqzaStS6aCG2IsiCozKUHjGTuupftS7XRaF4eIsUtWtFcQ1ytZ9pJYHypRQTi5NMSrTze5ThjnWxtHilK7gnBXik+aR0mYEVfSn13czQEC4rMOs+b9RAc/iibDNoLopfIdvmCCvfxzmySnR7Cu1iSUAONkir7PB+2Mt/qRFCH6P+jMamtCgQ8AmifXgVmDUlun+4MnKg3KrPd6ZjOEKhVe9mCHtGozk65RDREShfDdQKBgQDi+x2MuRa9peEMOHnOyXTS+v+MFcfmG0InsO08rFNBKZChLB+c9UHBdIvexpfBHigSyERfuDye4z6lxi8ZnierWMYJP30nxmrnxwTGTk1MQquhfs1A0kpmDnPsjlOS/drEIEIssNx2WbfJ7YtMxLWBtp+BJzGpQmr0LKC+NHRSrwKBgQCXiy2kJESIUkIs2ihV55hhT6/bZo1B1O5DPA2nkjOBXqXF6fvijzMDX82JjLd07lQZlI0n1Q/Hw0p4iYi9YVd2bLkLXF5UIb2qOeHj76enVFOrPHUSkC9Y2g/0Xs+60Ths2xRd8RrrfQU3kl5iVpBywkCIrb2M5+wRnNTk1W3TtwKBgQCvplyrteAfSurpJhs9JzE8w/hWU9SqAZYkWQp91W1oE95Um2yrbjBAoQxMjaqKS+f/APPIjy56Vqj4aHGyhW11b/Fw3qzfxvCcBKtxOs8eoMlo5FO6QgJJEA4tlcafDcvp0nzjUMqK28safLU7503+33B35fjMXxWdd5u9FaKfCQKBgC4W6j6tuRosymuRvgrCcRnHfpify/5loEFallyMnpWOD6Tt0OnK25z/GifnYDRz96gAAh5HMpFy18dpLOlMHamqz2yhHx8/U8vd5tHIJZlCkF/X91M5/uxrBccwvsT2tM6Got8fYSyVzWxlW8dUxIHiinYHQUsFjkqdBDLEpq5pAoGASoTw5RBEWFM0GuAZdXsyNyxU+4S+grkTS7WdW/Ymkukh+bJZbnvF9a6MkSehqXnknthmufonds2AFNS//63gixENsoOhzT5+2cdfc6tJECvJ9xXVXkf85AoQ6T/RrXF0W4m9yQyCngNJUrKUOIH3oDIfdZITlYzOC3u1ojj7VuQ=', + pubKey: 'CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCGXYU+uc2nn1zuJhfdFOl34upztnrD1gpHu58ousgHdGlGgYgbqLBAvIAauXdEL0+e30HofjA634SQxE+9nV+0FQBam1DDzHQlXsuwHV+2SKvSDkk4bVllMFpu2SJtts6VH+OXC/2ANJOm+eTALykQPYXgLIBxrhp/eD+Jz5r6wW2nq3k6OmYyK/4pgGzFjo5UyX+fa/171AJ68UPboFpDy6BZCcUjS0ondxPvD7cv5jMNqqMKIB/7rpi8n+Q3oeccRqVL56wH+FE3/QLjwYHwY6ILNRyvNXRqHjwBEXB2R5moXN0AFUWTw9rt3KhFiEjR1U81BTw5/xS7W2Iu0FgZAgMBAAE=' +}, { + id: 'QmScLDqRg7H6ipCYxm9fVk152UWavQFKscTdoT4YNHxgqp', + privKey: 'CAASpwkwggSjAgEAAoIBAQCWEHaTZ6LBLFP5OPrUqjDM/cF4b2zrfh1Zm3kd02ZtgQB3iYtZqRPJT5ctT3A7WdVF/7dCxPGOCkJlLekTx4Y4gD8JtjA+EfN9fR/2RBKbti2N3CD4vkGp9ss4hbBFcXIhl8zuD/ELHutbV6b8b4QXJGnxfp/B+1kNPnyd7SJznS0QyvI8OLI1nAkVKdYLDRW8kPKeHyx1xhdNDuTQVTFyAjRGQ4e3UYFB7bYIHW3E6kCtCoJDlj+JPC02Yt1LHzIzZVLvPvNFnYY2mag6OiGFuh/oMBIqvnPc1zRZ3eLUqeGZjQVaoR0kdgZUKz7Q2TBeNldxK/s6XO0DnkQTlelNAgMBAAECggEAdmt1dyswR2p4tdIeNpY7Pnj9JNIhTNDPznefI0dArCdBvBMhkVaYk6MoNIxcj6l7YOrDroAF8sXr0TZimMY6B/pERKCt/z1hPWTxRQBBAvnHhwvwRPq2jK6BfhAZoyM8IoBNKowP9mum5QUNdGV4Al8s73KyFX0IsCfgZSvNpRdlt+DzPh+hu/CyoZaMpRchJc1UmK8Fyk3KfO+m0DZNfHP5P08lXNfM6MZLgTJVVgERHyG+vBOzTd2RElMe19nVCzHwb3dPPRZSQ7Fnz3rA+GeLqsM2Zi4HNhfbD1OcD9C4wDj5tYL6hWTkdz4IlfVcjCeUHxgIOhdDV2K+OwbuAQKBgQD0FjUZ09UW2FQ/fitbvIB5f1SkXWPxTF9l6mAeuXhoGv2EtQUO4vq/PK6N08RjrZdWQy6UsqHgffi7lVQ8o3hvCKdbtf4sP+cM92OrY0WZV89os79ndj4tyvmnP8WojwRjt/2XEfgdoWcgWxW9DiYINTOQVimZX+X/3on4s8hEgQKBgQCdY3kOMbyQeLTRkqHXjVTY4ddO+v4S4wOUa1l4rTqAbq1W3JYWwoDQgFuIu3limIHmjnSJpCD4EioXFsM7p6csenoc20sHxsaHnJ6Mn5Te41UYmY9EW0otkQ0C3KbXM0hwQkjyplnEmZawGKmjEHW8DJ3vRYTv9TUCgYKxDHgOzQKBgB4A/NYH7BG61eBYKgxEx6YnuMfbkwV+Vdu5S8d7FQn3B2LgvZZu4FPRqcNVXLbEB+5ao8czjiKCWaj1Wj15+rvrXGcxn+Tglg5J+r5+nXeUC7LbJZQaPNp0MOwWMr3dlrSLUWjYlJ9Pz9VyXOG4c4Rexc/gR4zK9QLW4C7qKpwBAoGAZzyUb0cYlPtYQA+asTU3bnvVKy1f8yuNcZFowst+EDiI4u0WVh+HNzy6zdmLKa03p+/RaWeLaK0hhrubnEnAUmCUMNF3ScaM+u804LDcicc8TkKLwx7ObU0z56isl4RAA8K27tNHFrpYKXJD834cfBkaj5ReOrfw6Y/iFhhDuBECgYEA8gbC76uz7LSHhW30DSRTcqOzTyoe2oYKQaxuxYNp7vSSOkcdRen+mrdflDvud2q/zN2QdL4pgqdldHlR35M/lJ0f0B6zp74jlzbO9700wzsOqreezGc5eWiroDL100U9uIZ50BKb8CKtixIHpinUSPIUcVDkSAZ2y7mbfCxQwqQ=', + pubKey: 'CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCWEHaTZ6LBLFP5OPrUqjDM/cF4b2zrfh1Zm3kd02ZtgQB3iYtZqRPJT5ctT3A7WdVF/7dCxPGOCkJlLekTx4Y4gD8JtjA+EfN9fR/2RBKbti2N3CD4vkGp9ss4hbBFcXIhl8zuD/ELHutbV6b8b4QXJGnxfp/B+1kNPnyd7SJznS0QyvI8OLI1nAkVKdYLDRW8kPKeHyx1xhdNDuTQVTFyAjRGQ4e3UYFB7bYIHW3E6kCtCoJDlj+JPC02Yt1LHzIzZVLvPvNFnYY2mag6OiGFuh/oMBIqvnPc1zRZ3eLUqeGZjQVaoR0kdgZUKz7Q2TBeNldxK/s6XO0DnkQTlelNAgMBAAE=' +}, { + id: 'QmckxVrJw1Yo8LqvmDJNUmdAsKtSbiKWmrXJFyKmUraBoN', + privKey: 'CAASpwkwggSjAgEAAoIBAQC1/GFud/7xutux7qRfMj1sIdMRh99/chR6HqVj6LQqrgk4jil0mdN/LCk/tqPqmDtObHdmEhCoybzuhLbCKgUqryKDwO6yBJHSKWY9QqrKZtLJ37SgKwGjE3+NUD4r1dJHhtQrICFdOdSCBzs/v8gi+J+KZLHo7+Nms4z09ysy7qZh94Pd7cW4gmSMergqUeANLD9C0ERw1NXolswOW7Bi7UGr7yuBxejICLO3nkxe0OtpQBrYrqdCD9vs3t/HQZbPWVoiRj4VO7fxkAPKLl30HzcIfxj/ayg8NHcH59d08D+N2v5Sdh28gsiYKIPE9CXvuw//HUY2WVRY5fDC5JglAgMBAAECggEBAKb5aN/1w3pBqz/HqRMbQpYLNuD33M3PexBNPAy+P0iFpDo63bh5Rz+A4lvuFNmzUX70MFz7qENlzi6+n/zolxMB29YtWBUH8k904rTEjXXl//NviQgITZk106tx+4k2x5gPEm57LYGfBOdFAUzNhzDnE2LkXwRNzkS161f7zKwOEsaGWRscj6UvhO4MIFxjb32CVwt5eK4yOVqtyMs9u30K4Og+AZYTlhtm+bHg6ndCCBO6CQurCQ3jD6YOkT+L3MotKqt1kORpvzIB0ujZRf49Um8wlcjC5G9aexBeGriXaVdPF62zm7GA7RMsbQM/6aRbA1fEQXvJhHUNF9UFeaECgYEA8wCjKqQA7UQnHjRwTsktdwG6szfxd7z+5MTqHHTWhWzgcQLgdh5/dO/zanEoOThadMk5C1Bqjq96gH2xim8dg5XQofSVtV3Ui0dDa+XRB3E3fyY4D3RF5hHv85O0GcvQc6DIb+Ja1oOhvHowFB1C+CT3yEgwzX/EK9xpe+KtYAkCgYEAv7hCnj/DcZFU3fAfS+unBLuVoVJT/drxv66P686s7J8UM6tW+39yDBZ1IcwY9vHFepBvxY2fFfEeLI02QFM+lZXVhNGzFkP90agNHK01psGgrmIufl9zAo8WOKgkLgbYbSHzkkDeqyjEPU+B0QSsZOCE+qLCHSdsnTmo/TjQhj0CgYAz1+j3yfGgrS+jVBC53lXi0+2fGspbf2jqKdDArXSvFqFzuudki/EpY6AND4NDYfB6hguzjD6PnoSGMUrVfAtR7X6LbwEZpqEX7eZGeMt1yQPMDr1bHrVi9mS5FMQR1NfuM1lP9Xzn00GIUpE7WVrWUhzDEBPJY/7YVLf0hFH08QKBgDWBRQZJIVBmkNrHktRrVddaSq4U/d/Q5LrsCrpymYwH8WliHgpeTQPWmKXwAd+ZJdXIzYjCt202N4eTeVqGYOb6Q/anV2WVYBbM4avpIxoA28kPGY6nML+8EyWIt2ApBOmgGgvtEreNzwaVU9NzjHEyv6n7FlVwlT1jxCe3XWq5AoGASYPKQoPeDlW+NmRG7z9EJXJRPVtmLL40fmGgtju9QIjLnjuK8XaczjAWT+ySI93Whu+Eujf2Uj7Q+NfUjvAEzJgwzuOd3jlQvoALq11kuaxlNQTn7rx0A1QhBgUJE8AkvShPC9FEnA4j/CLJU0re9H/8VvyN6qE0Mho0+YbjpP8=', + pubKey: 'CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1/GFud/7xutux7qRfMj1sIdMRh99/chR6HqVj6LQqrgk4jil0mdN/LCk/tqPqmDtObHdmEhCoybzuhLbCKgUqryKDwO6yBJHSKWY9QqrKZtLJ37SgKwGjE3+NUD4r1dJHhtQrICFdOdSCBzs/v8gi+J+KZLHo7+Nms4z09ysy7qZh94Pd7cW4gmSMergqUeANLD9C0ERw1NXolswOW7Bi7UGr7yuBxejICLO3nkxe0OtpQBrYrqdCD9vs3t/HQZbPWVoiRj4VO7fxkAPKLl30HzcIfxj/ayg8NHcH59d08D+N2v5Sdh28gsiYKIPE9CXvuw//HUY2WVRY5fDC5JglAgMBAAE=' +}] From f58356aa10988b5e512294a3914eeed583ec5018 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 27 Sep 2019 11:21:15 +0200 Subject: [PATCH 309/337] chore: update contributors --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a9e2d6b..bee3f18 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.3.3", + "version": "0.4.0", "description": "A test suite and interface you can use to implement a connection interface.", "leadMaintainer": "Jacob Heun ", "main": "src/index.js", @@ -59,6 +59,7 @@ "Jacob Heun ", "James Ray <16969914+jamesray1@users.noreply.github.com>", "Pau Ramon Revilla ", - "Richard Littauer " + "Richard Littauer ", + "Vasco Santos " ] } From 721e475fd235f301bf8bfebcb60ca5f087cd2557 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 27 Sep 2019 11:21:16 +0200 Subject: [PATCH 310/337] chore: release version v0.4.0 --- CHANGELOG.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f2cbf76..0c7a4b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ + +# [0.4.0](https://github.com/libp2p/interface-connection/compare/v0.3.3...v0.4.0) (2019-09-27) + + +### Code Refactoring + +* API changes and switch to async iterators ([#29](https://github.com/libp2p/interface-connection/issues/29)) ([bf5c646](https://github.com/libp2p/interface-connection/commit/bf5c646)) + + +### BREAKING CHANGES + +* all the callbacks in the provided API were removed and each function uses async/await. Additionally, pull-streams are no longer being used. See the README for new usage. + + + ## [0.3.3](https://github.com/libp2p/interface-connection/compare/v0.3.1...v0.3.3) (2018-11-29) From b0b54db5b1d8418f2e8eb01ccf16eeb532c6c3dd Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Fri, 27 Sep 2019 11:48:45 +0200 Subject: [PATCH 311/337] chore: add basic discovery module for compliance spec --- .travis.yml | 34 ++++++++++++++++++++++++-- package.json | 16 +++++++------ test/compliance.spec.js | 13 ++++++++++ test/mock-discovery.js | 48 +++++++++++++++++++++++++++++++++++++ test/peer-discovery.spec.js | 1 - 5 files changed, 102 insertions(+), 10 deletions(-) create mode 100644 test/compliance.spec.js create mode 100644 test/mock-discovery.js delete mode 100644 test/peer-discovery.spec.js diff --git a/.travis.yml b/.travis.yml index 68ade7c..c7f74c1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,9 +2,39 @@ language: node_js cache: npm stages: - check + - test + - cov node_js: - '10' + - '12' -script: - - npm run lint +os: + - linux + - osx + - windows + +script: npx nyc -s npm run test:node -- --bail +after_success: npx nyc report --reporter=text-lcov > coverage.lcov && npx codecov + +jobs: + include: + - stage: check + script: + - npx aegir dep-check + - npm run lint + + - stage: test + name: chrome + addons: + chrome: stable + script: npx aegir test -t browser -t webworker + + - stage: test + name: firefox + addons: + firefox: latest + script: npx aegir test -t browser -t webworker -- --browsers FirefoxHeadless + +notifications: + email: false diff --git a/package.json b/package.json index 70f51a7..d9b146e 100644 --- a/package.json +++ b/package.json @@ -6,13 +6,13 @@ "main": "src/index.js", "scripts": { "lint": "aegir lint", - "test": "aegir test", "build": "aegir build", - "release": "aegir release --no-test", - "release-minor": "aegir release --type minor --no-test", - "release-major": "aegir release --type major --no-test", - "coverage": "exit(0)", - "coverage-publish": "exit(0)" + "test": "aegir test", + "test:node": "aegir test -t node", + "test:browser": "aegir test -t browser -t webworker", + "release": "aegir release", + "release-minor": "aegir release --type minor", + "release-major": "aegir release --type major" }, "pre-push": [ "lint" @@ -40,7 +40,9 @@ "devDependencies": { "aegir": "^20.3.1", "chai": "^4.2.0", - "dirty-chai": "^2.0.1" + "dirty-chai": "^2.0.1", + "peer-id": "^0.13.3", + "peer-info": "^0.17.0" }, "engines": { "node": ">=10.0.0", diff --git a/test/compliance.spec.js b/test/compliance.spec.js new file mode 100644 index 0000000..1eadba9 --- /dev/null +++ b/test/compliance.spec.js @@ -0,0 +1,13 @@ +/* eslint-env mocha */ +'use strict' + +const tests = require('../src') +const MockDiscovery = require('./mock-discovery') + +describe('compliance tests', () => { + tests({ + setup () { + return new MockDiscovery() + } + }) +}) diff --git a/test/mock-discovery.js b/test/mock-discovery.js new file mode 100644 index 0000000..c64b878 --- /dev/null +++ b/test/mock-discovery.js @@ -0,0 +1,48 @@ +'use strict' + +const { EventEmitter } = require('events') + +const PeerId = require('peer-id') +const PeerInfo = require('peer-info') + +/** + * Emits 'peer' events on discovery. + */ +class MockDiscovery extends EventEmitter { + /** + * Constructs a new Bootstrap. + * + * @param {Object} options + * @param {number} options.discoveryDelay - the delay to find a peer (in milli-seconds) + */ + constructor (options = {}) { + super() + + this.options = options + this._isRunning = false + this._timer = null + } + + start () { + this._isRunning = true + this._discoverPeer() + } + + stop () { + clearTimeout(this._timer) + this._isRunning = false + } + + async _discoverPeer () { + if (!this._isRunning) return + + const peerId = await PeerId.create({ bits: 512 }) + const peerInfo = new PeerInfo(peerId) + + this._timer = setTimeout(() => { + this.emit('peer', peerInfo) + }, this.options.discoveryDelay || 1000) + } +} + +module.exports = MockDiscovery diff --git a/test/peer-discovery.spec.js b/test/peer-discovery.spec.js deleted file mode 100644 index ccacec3..0000000 --- a/test/peer-discovery.spec.js +++ /dev/null @@ -1 +0,0 @@ -'use strict' From 808b72fafd556c241e4f708113bf43fd6f178280 Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Fri, 27 Sep 2019 12:40:01 +0200 Subject: [PATCH 312/337] chore: update contributors --- package.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d9b146e..5cef568 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-discovery", - "version": "0.0.2", + "version": "0.1.0", "description": "A test suite and interface you can use to implement a discovery interface.", "leadMaintainer": "Vasco Santos ", "main": "src/index.js", @@ -49,6 +49,9 @@ "npm": ">=6.0.0" }, "contributors": [ - "David Dias " + "David Dias ", + "Mike Goelzer ", + "Vasco Santos ", + "Vasco Santos " ] } From 6bb1f2a4cbdae6a3db8a874af480ea1796398da2 Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Fri, 27 Sep 2019 12:40:01 +0200 Subject: [PATCH 313/337] chore: release version v0.1.0 --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..7ea310f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,10 @@ + +# [0.1.0](https://github.com/libp2p/interface-peer-discovery/compare/v0.0.1...v0.1.0) (2019-09-27) + + + + +## 0.0.1 (2017-02-09) + + + From 2814c76e23edc2279bf960f5ecaf2060d402a83a Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 27 Sep 2019 13:32:45 +0200 Subject: [PATCH 314/337] fix: add async support to setup (#11) --- README.md | 4 ++-- src/index.js | 6 ++++-- test/compliance.spec.js | 6 +++++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7e29b93..265cf45 100644 --- a/README.md +++ b/README.md @@ -38,10 +38,10 @@ Include this badge in your readme if you make a new module that uses interface-p ### Node.js -Install `interface-peer-discovery` as one of the dependencies of your project and as a test file. Then, using `mocha` (for JavaScript) or a test runner with compatible API, do: +Install `interface-discovery` as one of the dependencies of your project and as a test file. Then, using `mocha` (for JavaScript) or a test runner with compatible API, do: ```js -const test = require('interface-peer-discovery') +const test = require('interface-discovery') const common = { setup () { diff --git a/src/index.js b/src/index.js index 5b00fbd..343a7db 100644 --- a/src/index.js +++ b/src/index.js @@ -5,12 +5,14 @@ module.exports = (common) => { describe('interface-peer-discovery', () => { let discovery - before(() => { - discovery = common.setup() + before(async () => { + discovery = await common.setup() }) after(() => common.teardown && common.teardown()) + afterEach('ensure discovery was stopped', () => discovery.stop()) + it('can start the service', async () => { await discovery.start() }) diff --git a/test/compliance.spec.js b/test/compliance.spec.js index 1eadba9..5b54fba 100644 --- a/test/compliance.spec.js +++ b/test/compliance.spec.js @@ -6,8 +6,12 @@ const MockDiscovery = require('./mock-discovery') describe('compliance tests', () => { tests({ - setup () { + async setup () { + await new Promise(resolve => setTimeout(resolve, 10)) return new MockDiscovery() + }, + async teardown () { + await new Promise(resolve => setTimeout(resolve, 10)) } }) }) From bee951f0369ca1c6541f4e0b8df01b1a273d58e5 Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Fri, 27 Sep 2019 13:33:34 +0200 Subject: [PATCH 315/337] chore: update contributors --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 5cef568..e897719 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-discovery", - "version": "0.1.0", + "version": "0.1.1", "description": "A test suite and interface you can use to implement a discovery interface.", "leadMaintainer": "Vasco Santos ", "main": "src/index.js", @@ -50,6 +50,7 @@ }, "contributors": [ "David Dias ", + "Jacob Heun ", "Mike Goelzer ", "Vasco Santos ", "Vasco Santos " From 1f84bfc7493e48d0b68bb72f6af7aecdbe0783bd Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Fri, 27 Sep 2019 13:33:34 +0200 Subject: [PATCH 316/337] chore: release version v0.1.1 --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ea310f..79bc3d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ + +## [0.1.1](https://github.com/libp2p/interface-peer-discovery/compare/v0.1.0...v0.1.1) (2019-09-27) + + +### Bug Fixes + +* add async support to setup ([#11](https://github.com/libp2p/interface-peer-discovery/issues/11)) ([2814c76](https://github.com/libp2p/interface-peer-discovery/commit/2814c76)) + + + # [0.1.0](https://github.com/libp2p/interface-peer-discovery/compare/v0.0.1...v0.1.0) (2019-09-27) From 541bf83c1ea56834ceed6f658bd4d2776cfed66e Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Thu, 17 Oct 2019 14:38:37 +0200 Subject: [PATCH 317/337] feat: add support for timeline proxying (#31) --- package.json | 3 ++- src/connection.js | 4 ---- test/compliance.spec.js | 10 ++++++++-- test/connection.js | 33 ++++++++++++++++++++++++++++++++- 4 files changed, 42 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index bee3f18..cf84648 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,8 @@ "dirty-chai": "^2.0.1", "err-code": "^2.0.0", "multiaddr": "^7.1.0", - "peer-id": "~0.13.2" + "peer-id": "~0.13.2", + "sinon": "^7.5.0" }, "devDependencies": { "aegir": "^20.2.0", diff --git a/src/connection.js b/src/connection.js index 77e9ecb..71ba299 100644 --- a/src/connection.js +++ b/src/connection.js @@ -75,10 +75,6 @@ class Connection { */ this._stat = { ...stat, - timeline: { - ...stat.timeline, - close: undefined - }, status: 'open' } diff --git a/test/compliance.spec.js b/test/compliance.spec.js index e2b9b4d..decbdd2 100644 --- a/test/compliance.spec.js +++ b/test/compliance.spec.js @@ -10,7 +10,12 @@ const pair = require('it-pair') describe('compliance tests', () => { tests({ - async setup () { + /** + * Test setup. `properties` allows the compliance test to override + * certain values for testing. + * @param {*} properties + */ + async setup (properties) { const localAddr = multiaddr('/ip4/127.0.0.1/tcp/8080') const remoteAddr = multiaddr('/ip4/127.0.0.1/tcp/8081') const [localPeer, remotePeer] = await Promise.all([ @@ -49,7 +54,8 @@ describe('compliance tests', () => { } }, close: () => {}, - getStreams: () => openStreams + getStreams: () => openStreams, + ...properties }) }, async teardown () { diff --git a/test/connection.js b/test/connection.js index feb388e..267760f 100644 --- a/test/connection.js +++ b/test/connection.js @@ -5,6 +5,7 @@ const chai = require('chai') const expect = chai.expect chai.use(require('dirty-chai')) +const sinon = require('sinon') module.exports = (test) => { describe('connection', () => { @@ -69,9 +70,27 @@ module.exports = (test) => { describe('close connection', () => { let connection + let timelineProxy + const proxyHandler = { + set () { + return Reflect.set(...arguments) + } + } beforeEach(async () => { - connection = await test.setup() + timelineProxy = new Proxy({ + open: Date.now() - 10, + upgraded: Date.now() + }, proxyHandler) + + connection = await test.setup({ + stat: { + timeline: timelineProxy, + direction: 'outbound', + encryption: '/crypto/1.0.0', + multiplexer: '/muxer/1.0.0' + } + }) if (!connection) throw new Error('missing connection') }) @@ -100,6 +119,18 @@ module.exports = (test) => { expect(connection.stat.status).to.equal('closed') }) + it('should support a proxy on the timeline', async () => { + sinon.spy(proxyHandler, 'set') + expect(connection.stat.timeline.close).to.not.exist() + + await connection.close() + expect(proxyHandler.set.callCount).to.equal(1) + const [obj, key, value] = proxyHandler.set.getCall(0).args + expect(obj).to.eql(connection.stat.timeline) + expect(key).to.equal('close') + expect(value).to.be.a('number').that.equals(connection.stat.timeline.close) + }) + it('should fail to create a new stream if the connection is closing', async () => { expect(connection.stat.timeline.close).to.not.exist() connection.close() From cac492bb1ecf8b804c9c2d857596051aab7fcb91 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Thu, 17 Oct 2019 14:41:11 +0200 Subject: [PATCH 318/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cf84648..def4ae6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.4.0", + "version": "0.4.1", "description": "A test suite and interface you can use to implement a connection interface.", "leadMaintainer": "Jacob Heun ", "main": "src/index.js", From 499575cf8c9cc8c0d072c2c04f0f39e909ca9588 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Thu, 17 Oct 2019 14:41:12 +0200 Subject: [PATCH 319/337] chore: release version v0.4.1 --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c7a4b9..53e87fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ + +## [0.4.1](https://github.com/libp2p/interface-connection/compare/v0.4.0...v0.4.1) (2019-10-17) + + +### Features + +* add support for timeline proxying ([#31](https://github.com/libp2p/interface-connection/issues/31)) ([541bf83](https://github.com/libp2p/interface-connection/commit/541bf83)) + + + # [0.4.0](https://github.com/libp2p/interface-connection/compare/v0.3.3...v0.4.0) (2019-09-27) From e3be5c141b8b6fff703a38039d6d7618c3142325 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 13:37:29 +0200 Subject: [PATCH 320/337] tmp: move files --- .gitignore => main/.gitignore | 0 LICENSE => main/LICENSE | 0 README.md => main/README.md | 0 package.json => main/package.json | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename .gitignore => main/.gitignore (100%) rename LICENSE => main/LICENSE (100%) rename README.md => main/README.md (100%) rename package.json => main/package.json (100%) diff --git a/.gitignore b/main/.gitignore similarity index 100% rename from .gitignore rename to main/.gitignore diff --git a/LICENSE b/main/LICENSE similarity index 100% rename from LICENSE rename to main/LICENSE diff --git a/README.md b/main/README.md similarity index 100% rename from README.md rename to main/README.md diff --git a/package.json b/main/package.json similarity index 100% rename from package.json rename to main/package.json From df75bee27d8a49ede7ecd7a78f36c47f3a4ea761 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 13:39:17 +0200 Subject: [PATCH 321/337] refactor: move connection --- .gitignore => new-src/connection/.gitignore | 0 .npmignore => new-src/connection/.npmignore | 0 .travis.yml => new-src/connection/.travis.yml | 0 CHANGELOG.md => new-src/connection/CHANGELOG.md | 0 LICENSE => new-src/connection/LICENSE | 0 README.md => new-src/connection/README.md | 0 {src => new-src/connection}/connection.js | 0 {img => new-src/connection/img}/badge.png | Bin {img => new-src/connection/img}/badge.sketch | Bin {img => new-src/connection/img}/badge.svg | 0 {src => new-src/connection}/index.js | 0 package.json => new-src/connection/package.json | 0 .../connection/test}/compliance.spec.js | 0 {test => new-src/connection/test}/connection.js | 0 {test => new-src/connection/test}/utils/peers.js | 0 {src => new-src/connection}/tests.js | 0 16 files changed, 0 insertions(+), 0 deletions(-) rename .gitignore => new-src/connection/.gitignore (100%) rename .npmignore => new-src/connection/.npmignore (100%) rename .travis.yml => new-src/connection/.travis.yml (100%) rename CHANGELOG.md => new-src/connection/CHANGELOG.md (100%) rename LICENSE => new-src/connection/LICENSE (100%) rename README.md => new-src/connection/README.md (100%) rename {src => new-src/connection}/connection.js (100%) rename {img => new-src/connection/img}/badge.png (100%) rename {img => new-src/connection/img}/badge.sketch (100%) rename {img => new-src/connection/img}/badge.svg (100%) rename {src => new-src/connection}/index.js (100%) rename package.json => new-src/connection/package.json (100%) rename {test => new-src/connection/test}/compliance.spec.js (100%) rename {test => new-src/connection/test}/connection.js (100%) rename {test => new-src/connection/test}/utils/peers.js (100%) rename {src => new-src/connection}/tests.js (100%) diff --git a/.gitignore b/new-src/connection/.gitignore similarity index 100% rename from .gitignore rename to new-src/connection/.gitignore diff --git a/.npmignore b/new-src/connection/.npmignore similarity index 100% rename from .npmignore rename to new-src/connection/.npmignore diff --git a/.travis.yml b/new-src/connection/.travis.yml similarity index 100% rename from .travis.yml rename to new-src/connection/.travis.yml diff --git a/CHANGELOG.md b/new-src/connection/CHANGELOG.md similarity index 100% rename from CHANGELOG.md rename to new-src/connection/CHANGELOG.md diff --git a/LICENSE b/new-src/connection/LICENSE similarity index 100% rename from LICENSE rename to new-src/connection/LICENSE diff --git a/README.md b/new-src/connection/README.md similarity index 100% rename from README.md rename to new-src/connection/README.md diff --git a/src/connection.js b/new-src/connection/connection.js similarity index 100% rename from src/connection.js rename to new-src/connection/connection.js diff --git a/img/badge.png b/new-src/connection/img/badge.png similarity index 100% rename from img/badge.png rename to new-src/connection/img/badge.png diff --git a/img/badge.sketch b/new-src/connection/img/badge.sketch similarity index 100% rename from img/badge.sketch rename to new-src/connection/img/badge.sketch diff --git a/img/badge.svg b/new-src/connection/img/badge.svg similarity index 100% rename from img/badge.svg rename to new-src/connection/img/badge.svg diff --git a/src/index.js b/new-src/connection/index.js similarity index 100% rename from src/index.js rename to new-src/connection/index.js diff --git a/package.json b/new-src/connection/package.json similarity index 100% rename from package.json rename to new-src/connection/package.json diff --git a/test/compliance.spec.js b/new-src/connection/test/compliance.spec.js similarity index 100% rename from test/compliance.spec.js rename to new-src/connection/test/compliance.spec.js diff --git a/test/connection.js b/new-src/connection/test/connection.js similarity index 100% rename from test/connection.js rename to new-src/connection/test/connection.js diff --git a/test/utils/peers.js b/new-src/connection/test/utils/peers.js similarity index 100% rename from test/utils/peers.js rename to new-src/connection/test/utils/peers.js diff --git a/src/tests.js b/new-src/connection/tests.js similarity index 100% rename from src/tests.js rename to new-src/connection/tests.js From 6b025774b9e50e0292a8a7ba6b708ab6bfeb4a5d Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 13:42:16 +0200 Subject: [PATCH 322/337] refactor: move transport --- .gitignore => new-src/transport/.gitignore | 0 .npmignore => new-src/transport/.npmignore | 0 .travis.yml => new-src/transport/.travis.yml | 0 CHANGELOG.md => new-src/transport/CHANGELOG.md | 0 LICENSE => new-src/transport/LICENSE | 0 README.md => new-src/transport/README.md | 0 {src => new-src/transport}/adapter.js | 0 {src => new-src/transport}/dial-test.js | 0 {src => new-src/transport}/errors.js | 0 {src => new-src/transport}/filter-test.js | 0 {img => new-src/transport/img}/badge.png | Bin {img => new-src/transport/img}/badge.sketch | Bin {img => new-src/transport/img}/badge.svg | 0 {src => new-src/transport}/index.js | 0 {src => new-src/transport}/listen-test.js | 0 package.json => new-src/transport/package.json | 0 {test => new-src/transport/test}/transport.spec.js | 0 {src => new-src/transport}/utils/index.js | 0 18 files changed, 0 insertions(+), 0 deletions(-) rename .gitignore => new-src/transport/.gitignore (100%) rename .npmignore => new-src/transport/.npmignore (100%) rename .travis.yml => new-src/transport/.travis.yml (100%) rename CHANGELOG.md => new-src/transport/CHANGELOG.md (100%) rename LICENSE => new-src/transport/LICENSE (100%) rename README.md => new-src/transport/README.md (100%) rename {src => new-src/transport}/adapter.js (100%) rename {src => new-src/transport}/dial-test.js (100%) rename {src => new-src/transport}/errors.js (100%) rename {src => new-src/transport}/filter-test.js (100%) rename {img => new-src/transport/img}/badge.png (100%) rename {img => new-src/transport/img}/badge.sketch (100%) rename {img => new-src/transport/img}/badge.svg (100%) rename {src => new-src/transport}/index.js (100%) rename {src => new-src/transport}/listen-test.js (100%) rename package.json => new-src/transport/package.json (100%) rename {test => new-src/transport/test}/transport.spec.js (100%) rename {src => new-src/transport}/utils/index.js (100%) diff --git a/.gitignore b/new-src/transport/.gitignore similarity index 100% rename from .gitignore rename to new-src/transport/.gitignore diff --git a/.npmignore b/new-src/transport/.npmignore similarity index 100% rename from .npmignore rename to new-src/transport/.npmignore diff --git a/.travis.yml b/new-src/transport/.travis.yml similarity index 100% rename from .travis.yml rename to new-src/transport/.travis.yml diff --git a/CHANGELOG.md b/new-src/transport/CHANGELOG.md similarity index 100% rename from CHANGELOG.md rename to new-src/transport/CHANGELOG.md diff --git a/LICENSE b/new-src/transport/LICENSE similarity index 100% rename from LICENSE rename to new-src/transport/LICENSE diff --git a/README.md b/new-src/transport/README.md similarity index 100% rename from README.md rename to new-src/transport/README.md diff --git a/src/adapter.js b/new-src/transport/adapter.js similarity index 100% rename from src/adapter.js rename to new-src/transport/adapter.js diff --git a/src/dial-test.js b/new-src/transport/dial-test.js similarity index 100% rename from src/dial-test.js rename to new-src/transport/dial-test.js diff --git a/src/errors.js b/new-src/transport/errors.js similarity index 100% rename from src/errors.js rename to new-src/transport/errors.js diff --git a/src/filter-test.js b/new-src/transport/filter-test.js similarity index 100% rename from src/filter-test.js rename to new-src/transport/filter-test.js diff --git a/img/badge.png b/new-src/transport/img/badge.png similarity index 100% rename from img/badge.png rename to new-src/transport/img/badge.png diff --git a/img/badge.sketch b/new-src/transport/img/badge.sketch similarity index 100% rename from img/badge.sketch rename to new-src/transport/img/badge.sketch diff --git a/img/badge.svg b/new-src/transport/img/badge.svg similarity index 100% rename from img/badge.svg rename to new-src/transport/img/badge.svg diff --git a/src/index.js b/new-src/transport/index.js similarity index 100% rename from src/index.js rename to new-src/transport/index.js diff --git a/src/listen-test.js b/new-src/transport/listen-test.js similarity index 100% rename from src/listen-test.js rename to new-src/transport/listen-test.js diff --git a/package.json b/new-src/transport/package.json similarity index 100% rename from package.json rename to new-src/transport/package.json diff --git a/test/transport.spec.js b/new-src/transport/test/transport.spec.js similarity index 100% rename from test/transport.spec.js rename to new-src/transport/test/transport.spec.js diff --git a/src/utils/index.js b/new-src/transport/utils/index.js similarity index 100% rename from src/utils/index.js rename to new-src/transport/utils/index.js From cebcfe3e33d7cbe3b7de41894a2934fc1bd91d20 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 13:44:19 +0200 Subject: [PATCH 323/337] refactor: move peer-discovery --- .gitignore => new-src/peer-discovery/.gitignore | 0 .travis.yml => new-src/peer-discovery/.travis.yml | 0 CHANGELOG.md => new-src/peer-discovery/CHANGELOG.md | 0 LICENSE => new-src/peer-discovery/LICENSE | 0 README.md => new-src/peer-discovery/README.md | 0 {img => new-src/peer-discovery/img}/badge.png | Bin {img => new-src/peer-discovery/img}/badge.sketch | Bin {img => new-src/peer-discovery/img}/badge.svg | 0 {src => new-src/peer-discovery}/index.js | 0 package.json => new-src/peer-discovery/package.json | 0 .../peer-discovery/test}/compliance.spec.js | 0 .../peer-discovery/test}/mock-discovery.js | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename .gitignore => new-src/peer-discovery/.gitignore (100%) rename .travis.yml => new-src/peer-discovery/.travis.yml (100%) rename CHANGELOG.md => new-src/peer-discovery/CHANGELOG.md (100%) rename LICENSE => new-src/peer-discovery/LICENSE (100%) rename README.md => new-src/peer-discovery/README.md (100%) rename {img => new-src/peer-discovery/img}/badge.png (100%) rename {img => new-src/peer-discovery/img}/badge.sketch (100%) rename {img => new-src/peer-discovery/img}/badge.svg (100%) rename {src => new-src/peer-discovery}/index.js (100%) rename package.json => new-src/peer-discovery/package.json (100%) rename {test => new-src/peer-discovery/test}/compliance.spec.js (100%) rename {test => new-src/peer-discovery/test}/mock-discovery.js (100%) diff --git a/.gitignore b/new-src/peer-discovery/.gitignore similarity index 100% rename from .gitignore rename to new-src/peer-discovery/.gitignore diff --git a/.travis.yml b/new-src/peer-discovery/.travis.yml similarity index 100% rename from .travis.yml rename to new-src/peer-discovery/.travis.yml diff --git a/CHANGELOG.md b/new-src/peer-discovery/CHANGELOG.md similarity index 100% rename from CHANGELOG.md rename to new-src/peer-discovery/CHANGELOG.md diff --git a/LICENSE b/new-src/peer-discovery/LICENSE similarity index 100% rename from LICENSE rename to new-src/peer-discovery/LICENSE diff --git a/README.md b/new-src/peer-discovery/README.md similarity index 100% rename from README.md rename to new-src/peer-discovery/README.md diff --git a/img/badge.png b/new-src/peer-discovery/img/badge.png similarity index 100% rename from img/badge.png rename to new-src/peer-discovery/img/badge.png diff --git a/img/badge.sketch b/new-src/peer-discovery/img/badge.sketch similarity index 100% rename from img/badge.sketch rename to new-src/peer-discovery/img/badge.sketch diff --git a/img/badge.svg b/new-src/peer-discovery/img/badge.svg similarity index 100% rename from img/badge.svg rename to new-src/peer-discovery/img/badge.svg diff --git a/src/index.js b/new-src/peer-discovery/index.js similarity index 100% rename from src/index.js rename to new-src/peer-discovery/index.js diff --git a/package.json b/new-src/peer-discovery/package.json similarity index 100% rename from package.json rename to new-src/peer-discovery/package.json diff --git a/test/compliance.spec.js b/new-src/peer-discovery/test/compliance.spec.js similarity index 100% rename from test/compliance.spec.js rename to new-src/peer-discovery/test/compliance.spec.js diff --git a/test/mock-discovery.js b/new-src/peer-discovery/test/mock-discovery.js similarity index 100% rename from test/mock-discovery.js rename to new-src/peer-discovery/test/mock-discovery.js From 827197585e2148f4ed16a52aed057fa534ed888b Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 13:48:14 +0200 Subject: [PATCH 324/337] refactor: move stream-muxer --- .gitignore => new-src/stream-muxer/.gitignore | 0 .npmignore => new-src/stream-muxer/.npmignore | 0 .travis.yml => new-src/stream-muxer/.travis.yml | 0 CHANGELOG.md => new-src/stream-muxer/CHANGELOG.md | 0 LICENSE => new-src/stream-muxer/LICENSE | 0 README.md => new-src/stream-muxer/README.md | 0 {src => new-src/stream-muxer}/base-test.js | 0 {src => new-src/stream-muxer}/close-test.js | 0 {img => new-src/stream-muxer/img}/badge.png | Bin {img => new-src/stream-muxer/img}/badge.sketch | Bin {img => new-src/stream-muxer/img}/badge.svg | 0 {src => new-src/stream-muxer}/index.js | 0 {src => new-src/stream-muxer}/mega-stress-test.js | 0 package.json => new-src/stream-muxer/package.json | 0 {src => new-src/stream-muxer}/spawner.js | 0 {src => new-src/stream-muxer}/stress-test.js | 0 .../stream-muxer/test}/stream-muxer.spec.js | 0 17 files changed, 0 insertions(+), 0 deletions(-) rename .gitignore => new-src/stream-muxer/.gitignore (100%) rename .npmignore => new-src/stream-muxer/.npmignore (100%) rename .travis.yml => new-src/stream-muxer/.travis.yml (100%) rename CHANGELOG.md => new-src/stream-muxer/CHANGELOG.md (100%) rename LICENSE => new-src/stream-muxer/LICENSE (100%) rename README.md => new-src/stream-muxer/README.md (100%) rename {src => new-src/stream-muxer}/base-test.js (100%) rename {src => new-src/stream-muxer}/close-test.js (100%) rename {img => new-src/stream-muxer/img}/badge.png (100%) rename {img => new-src/stream-muxer/img}/badge.sketch (100%) rename {img => new-src/stream-muxer/img}/badge.svg (100%) rename {src => new-src/stream-muxer}/index.js (100%) rename {src => new-src/stream-muxer}/mega-stress-test.js (100%) rename package.json => new-src/stream-muxer/package.json (100%) rename {src => new-src/stream-muxer}/spawner.js (100%) rename {src => new-src/stream-muxer}/stress-test.js (100%) rename {test => new-src/stream-muxer/test}/stream-muxer.spec.js (100%) diff --git a/.gitignore b/new-src/stream-muxer/.gitignore similarity index 100% rename from .gitignore rename to new-src/stream-muxer/.gitignore diff --git a/.npmignore b/new-src/stream-muxer/.npmignore similarity index 100% rename from .npmignore rename to new-src/stream-muxer/.npmignore diff --git a/.travis.yml b/new-src/stream-muxer/.travis.yml similarity index 100% rename from .travis.yml rename to new-src/stream-muxer/.travis.yml diff --git a/CHANGELOG.md b/new-src/stream-muxer/CHANGELOG.md similarity index 100% rename from CHANGELOG.md rename to new-src/stream-muxer/CHANGELOG.md diff --git a/LICENSE b/new-src/stream-muxer/LICENSE similarity index 100% rename from LICENSE rename to new-src/stream-muxer/LICENSE diff --git a/README.md b/new-src/stream-muxer/README.md similarity index 100% rename from README.md rename to new-src/stream-muxer/README.md diff --git a/src/base-test.js b/new-src/stream-muxer/base-test.js similarity index 100% rename from src/base-test.js rename to new-src/stream-muxer/base-test.js diff --git a/src/close-test.js b/new-src/stream-muxer/close-test.js similarity index 100% rename from src/close-test.js rename to new-src/stream-muxer/close-test.js diff --git a/img/badge.png b/new-src/stream-muxer/img/badge.png similarity index 100% rename from img/badge.png rename to new-src/stream-muxer/img/badge.png diff --git a/img/badge.sketch b/new-src/stream-muxer/img/badge.sketch similarity index 100% rename from img/badge.sketch rename to new-src/stream-muxer/img/badge.sketch diff --git a/img/badge.svg b/new-src/stream-muxer/img/badge.svg similarity index 100% rename from img/badge.svg rename to new-src/stream-muxer/img/badge.svg diff --git a/src/index.js b/new-src/stream-muxer/index.js similarity index 100% rename from src/index.js rename to new-src/stream-muxer/index.js diff --git a/src/mega-stress-test.js b/new-src/stream-muxer/mega-stress-test.js similarity index 100% rename from src/mega-stress-test.js rename to new-src/stream-muxer/mega-stress-test.js diff --git a/package.json b/new-src/stream-muxer/package.json similarity index 100% rename from package.json rename to new-src/stream-muxer/package.json diff --git a/src/spawner.js b/new-src/stream-muxer/spawner.js similarity index 100% rename from src/spawner.js rename to new-src/stream-muxer/spawner.js diff --git a/src/stress-test.js b/new-src/stream-muxer/stress-test.js similarity index 100% rename from src/stress-test.js rename to new-src/stream-muxer/stress-test.js diff --git a/test/stream-muxer.spec.js b/new-src/stream-muxer/test/stream-muxer.spec.js similarity index 100% rename from test/stream-muxer.spec.js rename to new-src/stream-muxer/test/stream-muxer.spec.js From 51c985f564af5540bd46c2630c7244f951838bd2 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 13:50:39 +0200 Subject: [PATCH 325/337] refactor: move content-routing --- .gitignore => new-src/content-routing/.gitignore | 0 LICENSE => new-src/content-routing/LICENSE | 0 README.md => new-src/content-routing/README.md | 0 {img => new-src/content-routing/img}/badge.png | Bin {img => new-src/content-routing/img}/badge.sketch | Bin {img => new-src/content-routing/img}/badge.svg | 0 .../content-routing/package.json | 0 .../content-routing/tests}/base-test.js | 0 {tests => new-src/content-routing/tests}/index.js | 0 9 files changed, 0 insertions(+), 0 deletions(-) rename .gitignore => new-src/content-routing/.gitignore (100%) rename LICENSE => new-src/content-routing/LICENSE (100%) rename README.md => new-src/content-routing/README.md (100%) rename {img => new-src/content-routing/img}/badge.png (100%) rename {img => new-src/content-routing/img}/badge.sketch (100%) rename {img => new-src/content-routing/img}/badge.svg (100%) rename package.json => new-src/content-routing/package.json (100%) rename {tests => new-src/content-routing/tests}/base-test.js (100%) rename {tests => new-src/content-routing/tests}/index.js (100%) diff --git a/.gitignore b/new-src/content-routing/.gitignore similarity index 100% rename from .gitignore rename to new-src/content-routing/.gitignore diff --git a/LICENSE b/new-src/content-routing/LICENSE similarity index 100% rename from LICENSE rename to new-src/content-routing/LICENSE diff --git a/README.md b/new-src/content-routing/README.md similarity index 100% rename from README.md rename to new-src/content-routing/README.md diff --git a/img/badge.png b/new-src/content-routing/img/badge.png similarity index 100% rename from img/badge.png rename to new-src/content-routing/img/badge.png diff --git a/img/badge.sketch b/new-src/content-routing/img/badge.sketch similarity index 100% rename from img/badge.sketch rename to new-src/content-routing/img/badge.sketch diff --git a/img/badge.svg b/new-src/content-routing/img/badge.svg similarity index 100% rename from img/badge.svg rename to new-src/content-routing/img/badge.svg diff --git a/package.json b/new-src/content-routing/package.json similarity index 100% rename from package.json rename to new-src/content-routing/package.json diff --git a/tests/base-test.js b/new-src/content-routing/tests/base-test.js similarity index 100% rename from tests/base-test.js rename to new-src/content-routing/tests/base-test.js diff --git a/tests/index.js b/new-src/content-routing/tests/index.js similarity index 100% rename from tests/index.js rename to new-src/content-routing/tests/index.js From 00e150ffcd8c82e360a3ea5c92fe8ca831000092 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 13:52:21 +0200 Subject: [PATCH 326/337] refactor: move peer-routing --- .gitignore => new-src/peer-routing/.gitignore | 0 LICENSE => new-src/peer-routing/LICENSE | 0 README.md => new-src/peer-routing/README.md | 0 {img => new-src/peer-routing/img}/badge.png | Bin {img => new-src/peer-routing/img}/badge.sketch | Bin {img => new-src/peer-routing/img}/badge.svg | 0 package.json => new-src/peer-routing/package.json | 0 {tests => new-src/peer-routing/tests}/base-test.js | 0 {tests => new-src/peer-routing/tests}/index.js | 0 9 files changed, 0 insertions(+), 0 deletions(-) rename .gitignore => new-src/peer-routing/.gitignore (100%) rename LICENSE => new-src/peer-routing/LICENSE (100%) rename README.md => new-src/peer-routing/README.md (100%) rename {img => new-src/peer-routing/img}/badge.png (100%) rename {img => new-src/peer-routing/img}/badge.sketch (100%) rename {img => new-src/peer-routing/img}/badge.svg (100%) rename package.json => new-src/peer-routing/package.json (100%) rename {tests => new-src/peer-routing/tests}/base-test.js (100%) rename {tests => new-src/peer-routing/tests}/index.js (100%) diff --git a/.gitignore b/new-src/peer-routing/.gitignore similarity index 100% rename from .gitignore rename to new-src/peer-routing/.gitignore diff --git a/LICENSE b/new-src/peer-routing/LICENSE similarity index 100% rename from LICENSE rename to new-src/peer-routing/LICENSE diff --git a/README.md b/new-src/peer-routing/README.md similarity index 100% rename from README.md rename to new-src/peer-routing/README.md diff --git a/img/badge.png b/new-src/peer-routing/img/badge.png similarity index 100% rename from img/badge.png rename to new-src/peer-routing/img/badge.png diff --git a/img/badge.sketch b/new-src/peer-routing/img/badge.sketch similarity index 100% rename from img/badge.sketch rename to new-src/peer-routing/img/badge.sketch diff --git a/img/badge.svg b/new-src/peer-routing/img/badge.svg similarity index 100% rename from img/badge.svg rename to new-src/peer-routing/img/badge.svg diff --git a/package.json b/new-src/peer-routing/package.json similarity index 100% rename from package.json rename to new-src/peer-routing/package.json diff --git a/tests/base-test.js b/new-src/peer-routing/tests/base-test.js similarity index 100% rename from tests/base-test.js rename to new-src/peer-routing/tests/base-test.js diff --git a/tests/index.js b/new-src/peer-routing/tests/index.js similarity index 100% rename from tests/index.js rename to new-src/peer-routing/tests/index.js From 798fc75443e26dd1bb4ba83e454849790f154b61 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 13:54:50 +0200 Subject: [PATCH 327/337] refactor: move record-store --- .gitignore => new-src/record-store/.gitignore | 0 LICENSE => new-src/record-store/LICENSE | 0 README.md => new-src/record-store/README.md | 0 {img => new-src/record-store/img}/badge.png | Bin {img => new-src/record-store/img}/badge.sketch | Bin {img => new-src/record-store/img}/badge.svg | 0 package.json => new-src/record-store/package.json | 0 {tests => new-src/record-store/tests}/base-test.js | 0 {tests => new-src/record-store/tests}/index.js | 0 9 files changed, 0 insertions(+), 0 deletions(-) rename .gitignore => new-src/record-store/.gitignore (100%) rename LICENSE => new-src/record-store/LICENSE (100%) rename README.md => new-src/record-store/README.md (100%) rename {img => new-src/record-store/img}/badge.png (100%) rename {img => new-src/record-store/img}/badge.sketch (100%) rename {img => new-src/record-store/img}/badge.svg (100%) rename package.json => new-src/record-store/package.json (100%) rename {tests => new-src/record-store/tests}/base-test.js (100%) rename {tests => new-src/record-store/tests}/index.js (100%) diff --git a/.gitignore b/new-src/record-store/.gitignore similarity index 100% rename from .gitignore rename to new-src/record-store/.gitignore diff --git a/LICENSE b/new-src/record-store/LICENSE similarity index 100% rename from LICENSE rename to new-src/record-store/LICENSE diff --git a/README.md b/new-src/record-store/README.md similarity index 100% rename from README.md rename to new-src/record-store/README.md diff --git a/img/badge.png b/new-src/record-store/img/badge.png similarity index 100% rename from img/badge.png rename to new-src/record-store/img/badge.png diff --git a/img/badge.sketch b/new-src/record-store/img/badge.sketch similarity index 100% rename from img/badge.sketch rename to new-src/record-store/img/badge.sketch diff --git a/img/badge.svg b/new-src/record-store/img/badge.svg similarity index 100% rename from img/badge.svg rename to new-src/record-store/img/badge.svg diff --git a/package.json b/new-src/record-store/package.json similarity index 100% rename from package.json rename to new-src/record-store/package.json diff --git a/tests/base-test.js b/new-src/record-store/tests/base-test.js similarity index 100% rename from tests/base-test.js rename to new-src/record-store/tests/base-test.js diff --git a/tests/index.js b/new-src/record-store/tests/index.js similarity index 100% rename from tests/index.js rename to new-src/record-store/tests/index.js From 020f72b33698635d23a64856175f372ac17a3976 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 13:58:35 +0200 Subject: [PATCH 328/337] refactor: move all files to the right place --- main/.gitignore => .gitignore | 0 main/LICENSE => LICENSE | 0 main/README.md => README.md | 14 ++++++++------ main/package.json => package.json | 0 {new-src => src}/connection/.gitignore | 0 {new-src => src}/connection/.npmignore | 0 {new-src => src}/connection/.travis.yml | 0 {new-src => src}/connection/CHANGELOG.md | 0 {new-src => src}/connection/LICENSE | 0 {new-src => src}/connection/README.md | 0 {new-src => src}/connection/connection.js | 0 {new-src => src}/connection/img/badge.png | Bin {new-src => src}/connection/img/badge.sketch | Bin {new-src => src}/connection/img/badge.svg | 0 {new-src => src}/connection/index.js | 0 {new-src => src}/connection/package.json | 0 .../connection/test/compliance.spec.js | 0 {new-src => src}/connection/test/connection.js | 0 {new-src => src}/connection/test/utils/peers.js | 0 {new-src => src}/connection/tests.js | 0 {new-src => src}/content-routing/.gitignore | 0 {new-src => src}/content-routing/LICENSE | 0 {new-src => src}/content-routing/README.md | 0 {new-src => src}/content-routing/img/badge.png | Bin {new-src => src}/content-routing/img/badge.sketch | Bin {new-src => src}/content-routing/img/badge.svg | 0 {new-src => src}/content-routing/package.json | 0 .../content-routing/tests/base-test.js | 0 {new-src => src}/content-routing/tests/index.js | 0 {new-src => src}/peer-discovery/.gitignore | 0 {new-src => src}/peer-discovery/.travis.yml | 0 {new-src => src}/peer-discovery/CHANGELOG.md | 0 {new-src => src}/peer-discovery/LICENSE | 0 {new-src => src}/peer-discovery/README.md | 0 {new-src => src}/peer-discovery/img/badge.png | Bin {new-src => src}/peer-discovery/img/badge.sketch | Bin {new-src => src}/peer-discovery/img/badge.svg | 0 {new-src => src}/peer-discovery/index.js | 0 {new-src => src}/peer-discovery/package.json | 0 .../peer-discovery/test/compliance.spec.js | 0 .../peer-discovery/test/mock-discovery.js | 0 {new-src => src}/peer-routing/.gitignore | 0 {new-src => src}/peer-routing/LICENSE | 0 {new-src => src}/peer-routing/README.md | 0 {new-src => src}/peer-routing/img/badge.png | Bin {new-src => src}/peer-routing/img/badge.sketch | Bin {new-src => src}/peer-routing/img/badge.svg | 0 {new-src => src}/peer-routing/package.json | 0 {new-src => src}/peer-routing/tests/base-test.js | 0 {new-src => src}/peer-routing/tests/index.js | 0 {new-src => src}/record-store/.gitignore | 0 {new-src => src}/record-store/LICENSE | 0 {new-src => src}/record-store/README.md | 0 {new-src => src}/record-store/img/badge.png | Bin {new-src => src}/record-store/img/badge.sketch | Bin {new-src => src}/record-store/img/badge.svg | 0 {new-src => src}/record-store/package.json | 0 {new-src => src}/record-store/tests/base-test.js | 0 {new-src => src}/record-store/tests/index.js | 0 {new-src => src}/stream-muxer/.gitignore | 0 {new-src => src}/stream-muxer/.npmignore | 0 {new-src => src}/stream-muxer/.travis.yml | 0 {new-src => src}/stream-muxer/CHANGELOG.md | 0 {new-src => src}/stream-muxer/LICENSE | 0 {new-src => src}/stream-muxer/README.md | 0 {new-src => src}/stream-muxer/base-test.js | 0 {new-src => src}/stream-muxer/close-test.js | 0 {new-src => src}/stream-muxer/img/badge.png | Bin {new-src => src}/stream-muxer/img/badge.sketch | Bin {new-src => src}/stream-muxer/img/badge.svg | 0 {new-src => src}/stream-muxer/index.js | 0 {new-src => src}/stream-muxer/mega-stress-test.js | 0 {new-src => src}/stream-muxer/package.json | 0 {new-src => src}/stream-muxer/spawner.js | 0 {new-src => src}/stream-muxer/stress-test.js | 0 .../stream-muxer/test/stream-muxer.spec.js | 0 {new-src => src}/transport/.gitignore | 0 {new-src => src}/transport/.npmignore | 0 {new-src => src}/transport/.travis.yml | 0 {new-src => src}/transport/CHANGELOG.md | 0 {new-src => src}/transport/LICENSE | 0 {new-src => src}/transport/README.md | 0 {new-src => src}/transport/adapter.js | 0 {new-src => src}/transport/dial-test.js | 0 {new-src => src}/transport/errors.js | 0 {new-src => src}/transport/filter-test.js | 0 {new-src => src}/transport/img/badge.png | Bin {new-src => src}/transport/img/badge.sketch | Bin {new-src => src}/transport/img/badge.svg | 0 {new-src => src}/transport/index.js | 0 {new-src => src}/transport/listen-test.js | 0 {new-src => src}/transport/package.json | 0 {new-src => src}/transport/test/transport.spec.js | 0 {new-src => src}/transport/utils/index.js | 0 94 files changed, 8 insertions(+), 6 deletions(-) rename main/.gitignore => .gitignore (100%) rename main/LICENSE => LICENSE (100%) rename main/README.md => README.md (82%) rename main/package.json => package.json (100%) rename {new-src => src}/connection/.gitignore (100%) rename {new-src => src}/connection/.npmignore (100%) rename {new-src => src}/connection/.travis.yml (100%) rename {new-src => src}/connection/CHANGELOG.md (100%) rename {new-src => src}/connection/LICENSE (100%) rename {new-src => src}/connection/README.md (100%) rename {new-src => src}/connection/connection.js (100%) rename {new-src => src}/connection/img/badge.png (100%) rename {new-src => src}/connection/img/badge.sketch (100%) rename {new-src => src}/connection/img/badge.svg (100%) rename {new-src => src}/connection/index.js (100%) rename {new-src => src}/connection/package.json (100%) rename {new-src => src}/connection/test/compliance.spec.js (100%) rename {new-src => src}/connection/test/connection.js (100%) rename {new-src => src}/connection/test/utils/peers.js (100%) rename {new-src => src}/connection/tests.js (100%) rename {new-src => src}/content-routing/.gitignore (100%) rename {new-src => src}/content-routing/LICENSE (100%) rename {new-src => src}/content-routing/README.md (100%) rename {new-src => src}/content-routing/img/badge.png (100%) rename {new-src => src}/content-routing/img/badge.sketch (100%) rename {new-src => src}/content-routing/img/badge.svg (100%) rename {new-src => src}/content-routing/package.json (100%) rename {new-src => src}/content-routing/tests/base-test.js (100%) rename {new-src => src}/content-routing/tests/index.js (100%) rename {new-src => src}/peer-discovery/.gitignore (100%) rename {new-src => src}/peer-discovery/.travis.yml (100%) rename {new-src => src}/peer-discovery/CHANGELOG.md (100%) rename {new-src => src}/peer-discovery/LICENSE (100%) rename {new-src => src}/peer-discovery/README.md (100%) rename {new-src => src}/peer-discovery/img/badge.png (100%) rename {new-src => src}/peer-discovery/img/badge.sketch (100%) rename {new-src => src}/peer-discovery/img/badge.svg (100%) rename {new-src => src}/peer-discovery/index.js (100%) rename {new-src => src}/peer-discovery/package.json (100%) rename {new-src => src}/peer-discovery/test/compliance.spec.js (100%) rename {new-src => src}/peer-discovery/test/mock-discovery.js (100%) rename {new-src => src}/peer-routing/.gitignore (100%) rename {new-src => src}/peer-routing/LICENSE (100%) rename {new-src => src}/peer-routing/README.md (100%) rename {new-src => src}/peer-routing/img/badge.png (100%) rename {new-src => src}/peer-routing/img/badge.sketch (100%) rename {new-src => src}/peer-routing/img/badge.svg (100%) rename {new-src => src}/peer-routing/package.json (100%) rename {new-src => src}/peer-routing/tests/base-test.js (100%) rename {new-src => src}/peer-routing/tests/index.js (100%) rename {new-src => src}/record-store/.gitignore (100%) rename {new-src => src}/record-store/LICENSE (100%) rename {new-src => src}/record-store/README.md (100%) rename {new-src => src}/record-store/img/badge.png (100%) rename {new-src => src}/record-store/img/badge.sketch (100%) rename {new-src => src}/record-store/img/badge.svg (100%) rename {new-src => src}/record-store/package.json (100%) rename {new-src => src}/record-store/tests/base-test.js (100%) rename {new-src => src}/record-store/tests/index.js (100%) rename {new-src => src}/stream-muxer/.gitignore (100%) rename {new-src => src}/stream-muxer/.npmignore (100%) rename {new-src => src}/stream-muxer/.travis.yml (100%) rename {new-src => src}/stream-muxer/CHANGELOG.md (100%) rename {new-src => src}/stream-muxer/LICENSE (100%) rename {new-src => src}/stream-muxer/README.md (100%) rename {new-src => src}/stream-muxer/base-test.js (100%) rename {new-src => src}/stream-muxer/close-test.js (100%) rename {new-src => src}/stream-muxer/img/badge.png (100%) rename {new-src => src}/stream-muxer/img/badge.sketch (100%) rename {new-src => src}/stream-muxer/img/badge.svg (100%) rename {new-src => src}/stream-muxer/index.js (100%) rename {new-src => src}/stream-muxer/mega-stress-test.js (100%) rename {new-src => src}/stream-muxer/package.json (100%) rename {new-src => src}/stream-muxer/spawner.js (100%) rename {new-src => src}/stream-muxer/stress-test.js (100%) rename {new-src => src}/stream-muxer/test/stream-muxer.spec.js (100%) rename {new-src => src}/transport/.gitignore (100%) rename {new-src => src}/transport/.npmignore (100%) rename {new-src => src}/transport/.travis.yml (100%) rename {new-src => src}/transport/CHANGELOG.md (100%) rename {new-src => src}/transport/LICENSE (100%) rename {new-src => src}/transport/README.md (100%) rename {new-src => src}/transport/adapter.js (100%) rename {new-src => src}/transport/dial-test.js (100%) rename {new-src => src}/transport/errors.js (100%) rename {new-src => src}/transport/filter-test.js (100%) rename {new-src => src}/transport/img/badge.png (100%) rename {new-src => src}/transport/img/badge.sketch (100%) rename {new-src => src}/transport/img/badge.svg (100%) rename {new-src => src}/transport/index.js (100%) rename {new-src => src}/transport/listen-test.js (100%) rename {new-src => src}/transport/package.json (100%) rename {new-src => src}/transport/test/transport.spec.js (100%) rename {new-src => src}/transport/utils/index.js (100%) diff --git a/main/.gitignore b/.gitignore similarity index 100% rename from main/.gitignore rename to .gitignore diff --git a/main/LICENSE b/LICENSE similarity index 100% rename from main/LICENSE rename to LICENSE diff --git a/main/README.md b/README.md similarity index 82% rename from main/README.md rename to README.md index 66655c9..73e6d3e 100644 --- a/main/README.md +++ b/README.md @@ -9,12 +9,13 @@ ## Interfaces -- [Connection](./connection) -- [Content Routing](./content-routing) -- [Peer Discovery](./peer-discovery) -- [Peer Routing](./peer-routing) -- [Stream Muxer](./stream-muxer) -- [Transport](./transport) +- [Connection](./src/connection) +- [Content Routing](./src/content-routing) +- [Peer Discovery](./src/peer-discovery) +- [Peer Routing](./src/peer-routing) +- [Record Store](./src/record-store) +- [Stream Muxer](./src/stream-muxer) +- [Transport](./src/transport) ### Origin Repositories @@ -23,6 +24,7 @@ For posterity, here is a link to the original repositories for each of the inter - [Content Routing](https://github.com/libp2p/interface-content-routing) - [Peer Discovery](https://github.com/libp2p/interface-peer-discovery) - [Peer Routing](https://github.com/libp2p/interface-peer-routing) +- [Record Store](https://github.com/libp2p/interface-record-store) - [Stream Muxer](https://github.com/libp2p/interface-stream-muxer) - [Transport](https://github.com/libp2p/interface-transport) diff --git a/main/package.json b/package.json similarity index 100% rename from main/package.json rename to package.json diff --git a/new-src/connection/.gitignore b/src/connection/.gitignore similarity index 100% rename from new-src/connection/.gitignore rename to src/connection/.gitignore diff --git a/new-src/connection/.npmignore b/src/connection/.npmignore similarity index 100% rename from new-src/connection/.npmignore rename to src/connection/.npmignore diff --git a/new-src/connection/.travis.yml b/src/connection/.travis.yml similarity index 100% rename from new-src/connection/.travis.yml rename to src/connection/.travis.yml diff --git a/new-src/connection/CHANGELOG.md b/src/connection/CHANGELOG.md similarity index 100% rename from new-src/connection/CHANGELOG.md rename to src/connection/CHANGELOG.md diff --git a/new-src/connection/LICENSE b/src/connection/LICENSE similarity index 100% rename from new-src/connection/LICENSE rename to src/connection/LICENSE diff --git a/new-src/connection/README.md b/src/connection/README.md similarity index 100% rename from new-src/connection/README.md rename to src/connection/README.md diff --git a/new-src/connection/connection.js b/src/connection/connection.js similarity index 100% rename from new-src/connection/connection.js rename to src/connection/connection.js diff --git a/new-src/connection/img/badge.png b/src/connection/img/badge.png similarity index 100% rename from new-src/connection/img/badge.png rename to src/connection/img/badge.png diff --git a/new-src/connection/img/badge.sketch b/src/connection/img/badge.sketch similarity index 100% rename from new-src/connection/img/badge.sketch rename to src/connection/img/badge.sketch diff --git a/new-src/connection/img/badge.svg b/src/connection/img/badge.svg similarity index 100% rename from new-src/connection/img/badge.svg rename to src/connection/img/badge.svg diff --git a/new-src/connection/index.js b/src/connection/index.js similarity index 100% rename from new-src/connection/index.js rename to src/connection/index.js diff --git a/new-src/connection/package.json b/src/connection/package.json similarity index 100% rename from new-src/connection/package.json rename to src/connection/package.json diff --git a/new-src/connection/test/compliance.spec.js b/src/connection/test/compliance.spec.js similarity index 100% rename from new-src/connection/test/compliance.spec.js rename to src/connection/test/compliance.spec.js diff --git a/new-src/connection/test/connection.js b/src/connection/test/connection.js similarity index 100% rename from new-src/connection/test/connection.js rename to src/connection/test/connection.js diff --git a/new-src/connection/test/utils/peers.js b/src/connection/test/utils/peers.js similarity index 100% rename from new-src/connection/test/utils/peers.js rename to src/connection/test/utils/peers.js diff --git a/new-src/connection/tests.js b/src/connection/tests.js similarity index 100% rename from new-src/connection/tests.js rename to src/connection/tests.js diff --git a/new-src/content-routing/.gitignore b/src/content-routing/.gitignore similarity index 100% rename from new-src/content-routing/.gitignore rename to src/content-routing/.gitignore diff --git a/new-src/content-routing/LICENSE b/src/content-routing/LICENSE similarity index 100% rename from new-src/content-routing/LICENSE rename to src/content-routing/LICENSE diff --git a/new-src/content-routing/README.md b/src/content-routing/README.md similarity index 100% rename from new-src/content-routing/README.md rename to src/content-routing/README.md diff --git a/new-src/content-routing/img/badge.png b/src/content-routing/img/badge.png similarity index 100% rename from new-src/content-routing/img/badge.png rename to src/content-routing/img/badge.png diff --git a/new-src/content-routing/img/badge.sketch b/src/content-routing/img/badge.sketch similarity index 100% rename from new-src/content-routing/img/badge.sketch rename to src/content-routing/img/badge.sketch diff --git a/new-src/content-routing/img/badge.svg b/src/content-routing/img/badge.svg similarity index 100% rename from new-src/content-routing/img/badge.svg rename to src/content-routing/img/badge.svg diff --git a/new-src/content-routing/package.json b/src/content-routing/package.json similarity index 100% rename from new-src/content-routing/package.json rename to src/content-routing/package.json diff --git a/new-src/content-routing/tests/base-test.js b/src/content-routing/tests/base-test.js similarity index 100% rename from new-src/content-routing/tests/base-test.js rename to src/content-routing/tests/base-test.js diff --git a/new-src/content-routing/tests/index.js b/src/content-routing/tests/index.js similarity index 100% rename from new-src/content-routing/tests/index.js rename to src/content-routing/tests/index.js diff --git a/new-src/peer-discovery/.gitignore b/src/peer-discovery/.gitignore similarity index 100% rename from new-src/peer-discovery/.gitignore rename to src/peer-discovery/.gitignore diff --git a/new-src/peer-discovery/.travis.yml b/src/peer-discovery/.travis.yml similarity index 100% rename from new-src/peer-discovery/.travis.yml rename to src/peer-discovery/.travis.yml diff --git a/new-src/peer-discovery/CHANGELOG.md b/src/peer-discovery/CHANGELOG.md similarity index 100% rename from new-src/peer-discovery/CHANGELOG.md rename to src/peer-discovery/CHANGELOG.md diff --git a/new-src/peer-discovery/LICENSE b/src/peer-discovery/LICENSE similarity index 100% rename from new-src/peer-discovery/LICENSE rename to src/peer-discovery/LICENSE diff --git a/new-src/peer-discovery/README.md b/src/peer-discovery/README.md similarity index 100% rename from new-src/peer-discovery/README.md rename to src/peer-discovery/README.md diff --git a/new-src/peer-discovery/img/badge.png b/src/peer-discovery/img/badge.png similarity index 100% rename from new-src/peer-discovery/img/badge.png rename to src/peer-discovery/img/badge.png diff --git a/new-src/peer-discovery/img/badge.sketch b/src/peer-discovery/img/badge.sketch similarity index 100% rename from new-src/peer-discovery/img/badge.sketch rename to src/peer-discovery/img/badge.sketch diff --git a/new-src/peer-discovery/img/badge.svg b/src/peer-discovery/img/badge.svg similarity index 100% rename from new-src/peer-discovery/img/badge.svg rename to src/peer-discovery/img/badge.svg diff --git a/new-src/peer-discovery/index.js b/src/peer-discovery/index.js similarity index 100% rename from new-src/peer-discovery/index.js rename to src/peer-discovery/index.js diff --git a/new-src/peer-discovery/package.json b/src/peer-discovery/package.json similarity index 100% rename from new-src/peer-discovery/package.json rename to src/peer-discovery/package.json diff --git a/new-src/peer-discovery/test/compliance.spec.js b/src/peer-discovery/test/compliance.spec.js similarity index 100% rename from new-src/peer-discovery/test/compliance.spec.js rename to src/peer-discovery/test/compliance.spec.js diff --git a/new-src/peer-discovery/test/mock-discovery.js b/src/peer-discovery/test/mock-discovery.js similarity index 100% rename from new-src/peer-discovery/test/mock-discovery.js rename to src/peer-discovery/test/mock-discovery.js diff --git a/new-src/peer-routing/.gitignore b/src/peer-routing/.gitignore similarity index 100% rename from new-src/peer-routing/.gitignore rename to src/peer-routing/.gitignore diff --git a/new-src/peer-routing/LICENSE b/src/peer-routing/LICENSE similarity index 100% rename from new-src/peer-routing/LICENSE rename to src/peer-routing/LICENSE diff --git a/new-src/peer-routing/README.md b/src/peer-routing/README.md similarity index 100% rename from new-src/peer-routing/README.md rename to src/peer-routing/README.md diff --git a/new-src/peer-routing/img/badge.png b/src/peer-routing/img/badge.png similarity index 100% rename from new-src/peer-routing/img/badge.png rename to src/peer-routing/img/badge.png diff --git a/new-src/peer-routing/img/badge.sketch b/src/peer-routing/img/badge.sketch similarity index 100% rename from new-src/peer-routing/img/badge.sketch rename to src/peer-routing/img/badge.sketch diff --git a/new-src/peer-routing/img/badge.svg b/src/peer-routing/img/badge.svg similarity index 100% rename from new-src/peer-routing/img/badge.svg rename to src/peer-routing/img/badge.svg diff --git a/new-src/peer-routing/package.json b/src/peer-routing/package.json similarity index 100% rename from new-src/peer-routing/package.json rename to src/peer-routing/package.json diff --git a/new-src/peer-routing/tests/base-test.js b/src/peer-routing/tests/base-test.js similarity index 100% rename from new-src/peer-routing/tests/base-test.js rename to src/peer-routing/tests/base-test.js diff --git a/new-src/peer-routing/tests/index.js b/src/peer-routing/tests/index.js similarity index 100% rename from new-src/peer-routing/tests/index.js rename to src/peer-routing/tests/index.js diff --git a/new-src/record-store/.gitignore b/src/record-store/.gitignore similarity index 100% rename from new-src/record-store/.gitignore rename to src/record-store/.gitignore diff --git a/new-src/record-store/LICENSE b/src/record-store/LICENSE similarity index 100% rename from new-src/record-store/LICENSE rename to src/record-store/LICENSE diff --git a/new-src/record-store/README.md b/src/record-store/README.md similarity index 100% rename from new-src/record-store/README.md rename to src/record-store/README.md diff --git a/new-src/record-store/img/badge.png b/src/record-store/img/badge.png similarity index 100% rename from new-src/record-store/img/badge.png rename to src/record-store/img/badge.png diff --git a/new-src/record-store/img/badge.sketch b/src/record-store/img/badge.sketch similarity index 100% rename from new-src/record-store/img/badge.sketch rename to src/record-store/img/badge.sketch diff --git a/new-src/record-store/img/badge.svg b/src/record-store/img/badge.svg similarity index 100% rename from new-src/record-store/img/badge.svg rename to src/record-store/img/badge.svg diff --git a/new-src/record-store/package.json b/src/record-store/package.json similarity index 100% rename from new-src/record-store/package.json rename to src/record-store/package.json diff --git a/new-src/record-store/tests/base-test.js b/src/record-store/tests/base-test.js similarity index 100% rename from new-src/record-store/tests/base-test.js rename to src/record-store/tests/base-test.js diff --git a/new-src/record-store/tests/index.js b/src/record-store/tests/index.js similarity index 100% rename from new-src/record-store/tests/index.js rename to src/record-store/tests/index.js diff --git a/new-src/stream-muxer/.gitignore b/src/stream-muxer/.gitignore similarity index 100% rename from new-src/stream-muxer/.gitignore rename to src/stream-muxer/.gitignore diff --git a/new-src/stream-muxer/.npmignore b/src/stream-muxer/.npmignore similarity index 100% rename from new-src/stream-muxer/.npmignore rename to src/stream-muxer/.npmignore diff --git a/new-src/stream-muxer/.travis.yml b/src/stream-muxer/.travis.yml similarity index 100% rename from new-src/stream-muxer/.travis.yml rename to src/stream-muxer/.travis.yml diff --git a/new-src/stream-muxer/CHANGELOG.md b/src/stream-muxer/CHANGELOG.md similarity index 100% rename from new-src/stream-muxer/CHANGELOG.md rename to src/stream-muxer/CHANGELOG.md diff --git a/new-src/stream-muxer/LICENSE b/src/stream-muxer/LICENSE similarity index 100% rename from new-src/stream-muxer/LICENSE rename to src/stream-muxer/LICENSE diff --git a/new-src/stream-muxer/README.md b/src/stream-muxer/README.md similarity index 100% rename from new-src/stream-muxer/README.md rename to src/stream-muxer/README.md diff --git a/new-src/stream-muxer/base-test.js b/src/stream-muxer/base-test.js similarity index 100% rename from new-src/stream-muxer/base-test.js rename to src/stream-muxer/base-test.js diff --git a/new-src/stream-muxer/close-test.js b/src/stream-muxer/close-test.js similarity index 100% rename from new-src/stream-muxer/close-test.js rename to src/stream-muxer/close-test.js diff --git a/new-src/stream-muxer/img/badge.png b/src/stream-muxer/img/badge.png similarity index 100% rename from new-src/stream-muxer/img/badge.png rename to src/stream-muxer/img/badge.png diff --git a/new-src/stream-muxer/img/badge.sketch b/src/stream-muxer/img/badge.sketch similarity index 100% rename from new-src/stream-muxer/img/badge.sketch rename to src/stream-muxer/img/badge.sketch diff --git a/new-src/stream-muxer/img/badge.svg b/src/stream-muxer/img/badge.svg similarity index 100% rename from new-src/stream-muxer/img/badge.svg rename to src/stream-muxer/img/badge.svg diff --git a/new-src/stream-muxer/index.js b/src/stream-muxer/index.js similarity index 100% rename from new-src/stream-muxer/index.js rename to src/stream-muxer/index.js diff --git a/new-src/stream-muxer/mega-stress-test.js b/src/stream-muxer/mega-stress-test.js similarity index 100% rename from new-src/stream-muxer/mega-stress-test.js rename to src/stream-muxer/mega-stress-test.js diff --git a/new-src/stream-muxer/package.json b/src/stream-muxer/package.json similarity index 100% rename from new-src/stream-muxer/package.json rename to src/stream-muxer/package.json diff --git a/new-src/stream-muxer/spawner.js b/src/stream-muxer/spawner.js similarity index 100% rename from new-src/stream-muxer/spawner.js rename to src/stream-muxer/spawner.js diff --git a/new-src/stream-muxer/stress-test.js b/src/stream-muxer/stress-test.js similarity index 100% rename from new-src/stream-muxer/stress-test.js rename to src/stream-muxer/stress-test.js diff --git a/new-src/stream-muxer/test/stream-muxer.spec.js b/src/stream-muxer/test/stream-muxer.spec.js similarity index 100% rename from new-src/stream-muxer/test/stream-muxer.spec.js rename to src/stream-muxer/test/stream-muxer.spec.js diff --git a/new-src/transport/.gitignore b/src/transport/.gitignore similarity index 100% rename from new-src/transport/.gitignore rename to src/transport/.gitignore diff --git a/new-src/transport/.npmignore b/src/transport/.npmignore similarity index 100% rename from new-src/transport/.npmignore rename to src/transport/.npmignore diff --git a/new-src/transport/.travis.yml b/src/transport/.travis.yml similarity index 100% rename from new-src/transport/.travis.yml rename to src/transport/.travis.yml diff --git a/new-src/transport/CHANGELOG.md b/src/transport/CHANGELOG.md similarity index 100% rename from new-src/transport/CHANGELOG.md rename to src/transport/CHANGELOG.md diff --git a/new-src/transport/LICENSE b/src/transport/LICENSE similarity index 100% rename from new-src/transport/LICENSE rename to src/transport/LICENSE diff --git a/new-src/transport/README.md b/src/transport/README.md similarity index 100% rename from new-src/transport/README.md rename to src/transport/README.md diff --git a/new-src/transport/adapter.js b/src/transport/adapter.js similarity index 100% rename from new-src/transport/adapter.js rename to src/transport/adapter.js diff --git a/new-src/transport/dial-test.js b/src/transport/dial-test.js similarity index 100% rename from new-src/transport/dial-test.js rename to src/transport/dial-test.js diff --git a/new-src/transport/errors.js b/src/transport/errors.js similarity index 100% rename from new-src/transport/errors.js rename to src/transport/errors.js diff --git a/new-src/transport/filter-test.js b/src/transport/filter-test.js similarity index 100% rename from new-src/transport/filter-test.js rename to src/transport/filter-test.js diff --git a/new-src/transport/img/badge.png b/src/transport/img/badge.png similarity index 100% rename from new-src/transport/img/badge.png rename to src/transport/img/badge.png diff --git a/new-src/transport/img/badge.sketch b/src/transport/img/badge.sketch similarity index 100% rename from new-src/transport/img/badge.sketch rename to src/transport/img/badge.sketch diff --git a/new-src/transport/img/badge.svg b/src/transport/img/badge.svg similarity index 100% rename from new-src/transport/img/badge.svg rename to src/transport/img/badge.svg diff --git a/new-src/transport/index.js b/src/transport/index.js similarity index 100% rename from new-src/transport/index.js rename to src/transport/index.js diff --git a/new-src/transport/listen-test.js b/src/transport/listen-test.js similarity index 100% rename from new-src/transport/listen-test.js rename to src/transport/listen-test.js diff --git a/new-src/transport/package.json b/src/transport/package.json similarity index 100% rename from new-src/transport/package.json rename to src/transport/package.json diff --git a/new-src/transport/test/transport.spec.js b/src/transport/test/transport.spec.js similarity index 100% rename from new-src/transport/test/transport.spec.js rename to src/transport/test/transport.spec.js diff --git a/new-src/transport/utils/index.js b/src/transport/utils/index.js similarity index 100% rename from new-src/transport/utils/index.js rename to src/transport/utils/index.js From c9fa1ac2495932a3fdd940285e6098a0aa7351b7 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 14:14:00 +0200 Subject: [PATCH 329/337] chore: fix connection tests and do cleanup --- src/connection/.travis.yml => .travis.yml | 0 package.json | 12 +- src/connection/.gitignore | 30 ----- src/connection/.npmignore | 29 ----- src/connection/CHANGELOG.md | 115 ------------------ src/connection/LICENSE | 22 ---- src/connection/README.md | 25 +--- src/connection/{test => tests}/connection.js | 0 src/connection/{tests.js => tests/index.js} | 2 +- .../connection}/compliance.spec.js | 6 +- {src/connection/test => test}/utils/peers.js | 0 11 files changed, 19 insertions(+), 222 deletions(-) rename src/connection/.travis.yml => .travis.yml (100%) delete mode 100644 src/connection/.gitignore delete mode 100644 src/connection/.npmignore delete mode 100644 src/connection/CHANGELOG.md delete mode 100644 src/connection/LICENSE rename src/connection/{test => tests}/connection.js (100%) rename src/connection/{tests.js => tests/index.js} (63%) rename {src/connection/test => test/connection}/compliance.spec.js (91%) rename {src/connection/test => test}/utils/peers.js (100%) diff --git a/src/connection/.travis.yml b/.travis.yml similarity index 100% rename from src/connection/.travis.yml rename to .travis.yml diff --git a/package.json b/package.json index 23bc619..af725ab 100644 --- a/package.json +++ b/package.json @@ -32,8 +32,18 @@ }, "homepage": "https://github.com/libp2p/js-interfaces#readme", "dependencies": { + "abortable-iterator": "^2.1.0", + "chai": "^4.2.0", + "class-is": "^1.1.0", + "dirty-chai": "^2.0.1", + "err-code": "^2.0.0", + "multiaddr": "^7.1.0", + "peer-id": "^0.13.3", + "sinon": "^7.5.0" }, "devDependencies": { - "aegir": "^20.4.1" + "aegir": "^20.4.1", + "it-pair": "^1.0.0", + "it-pipe": "^1.0.1" } } diff --git a/src/connection/.gitignore b/src/connection/.gitignore deleted file mode 100644 index 229031f..0000000 --- a/src/connection/.gitignore +++ /dev/null @@ -1,30 +0,0 @@ -# Logs -logs -*.log - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git -node_modules - -dist -package-lock.json diff --git a/src/connection/.npmignore b/src/connection/.npmignore deleted file mode 100644 index 00a160d..0000000 --- a/src/connection/.npmignore +++ /dev/null @@ -1,29 +0,0 @@ -# Logs -logs -*.log - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git -node_modules - -test diff --git a/src/connection/CHANGELOG.md b/src/connection/CHANGELOG.md deleted file mode 100644 index 53e87fa..0000000 --- a/src/connection/CHANGELOG.md +++ /dev/null @@ -1,115 +0,0 @@ - -## [0.4.1](https://github.com/libp2p/interface-connection/compare/v0.4.0...v0.4.1) (2019-10-17) - - -### Features - -* add support for timeline proxying ([#31](https://github.com/libp2p/interface-connection/issues/31)) ([541bf83](https://github.com/libp2p/interface-connection/commit/541bf83)) - - - - -# [0.4.0](https://github.com/libp2p/interface-connection/compare/v0.3.3...v0.4.0) (2019-09-27) - - -### Code Refactoring - -* API changes and switch to async iterators ([#29](https://github.com/libp2p/interface-connection/issues/29)) ([bf5c646](https://github.com/libp2p/interface-connection/commit/bf5c646)) - - -### BREAKING CHANGES - -* all the callbacks in the provided API were removed and each function uses async/await. Additionally, pull-streams are no longer being used. See the README for new usage. - - - - -## [0.3.3](https://github.com/libp2p/interface-connection/compare/v0.3.1...v0.3.3) (2018-11-29) - - - - -## [0.3.1](https://github.com/libp2p/interface-connection/compare/v0.3.0...v0.3.1) (2017-02-09) - - - - -# [0.3.0](https://github.com/libp2p/interface-connection/compare/v0.2.1...v0.3.0) (2016-11-03) - - -### Features - -* async crypto + sauce labs + aegir 9 ([b40114c](https://github.com/libp2p/interface-connection/commit/b40114c)) - - - - -## [0.2.1](https://github.com/libp2p/interface-connection/compare/v0.2.0...v0.2.1) (2016-09-05) - - -### Bug Fixes - -* **package.json:** point to right main ([84cd2ca](https://github.com/libp2p/interface-connection/commit/84cd2ca)) - - - - -# [0.2.0](https://github.com/libp2p/interface-connection/compare/v0.1.8...v0.2.0) (2016-09-05) - - -### Bug Fixes - -* **deps:** fix package.json ([e0f7db3](https://github.com/libp2p/interface-connection/commit/e0f7db3)) - - -### Features - -* **connection:** migrate to pull-streams ([ed5727a](https://github.com/libp2p/interface-connection/commit/ed5727a)) - - - - -## [0.1.8](https://github.com/libp2p/interface-connection/compare/v0.1.7...v0.1.8) (2016-08-03) - - - - -## [0.1.7](https://github.com/libp2p/interface-connection/compare/v0.1.6...v0.1.7) (2016-06-27) - - - - -## [0.1.6](https://github.com/libp2p/interface-connection/compare/v0.1.5...v0.1.6) (2016-06-23) - - - - -## [0.1.5](https://github.com/libp2p/interface-connection/compare/v0.1.4...v0.1.5) (2016-06-23) - - - - -## [0.1.4](https://github.com/libp2p/interface-connection/compare/v0.1.3...v0.1.4) (2016-06-23) - - - - -## [0.1.3](https://github.com/libp2p/interface-connection/compare/v0.1.0...v0.1.3) (2016-06-16) - - - - -# [0.1.0](https://github.com/libp2p/interface-connection/compare/v0.0.3...v0.1.0) (2016-06-16) - - - - -## [0.0.3](https://github.com/libp2p/interface-connection/compare/v0.0.1...v0.0.3) (2015-12-12) - - - - -## 0.0.1 (2015-09-17) - - - diff --git a/src/connection/LICENSE b/src/connection/LICENSE deleted file mode 100644 index 59a33ba..0000000 --- a/src/connection/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 David Dias - -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/src/connection/README.md b/src/connection/README.md index a6b8246..ee1df68 100644 --- a/src/connection/README.md +++ b/src/connection/README.md @@ -1,25 +1,12 @@ interface-connection ================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) -[![](https://img.shields.io/codecov/c/github/libp2p/interface-connection.svg?style=flat-square)](https://codecov.io/gh/libp2p/interface-connection) -[![](https://img.shields.io/travis/libp2p/interface-connection.svg?style=flat-square)](https://travis-ci.com/libp2p/interface-connection) -[![Dependency Status](https://david-dm.org/libp2p/interface-connection.svg?style=flat-square)](https://david-dm.org/libp2p/interface-connection) -[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) - This is a test suite and interface you can use to implement a connection. The connection interface contains all the metadata associated with it, as well as an array of the streams opened through this connection. In the same way as the connection, a stream contains properties with its metadata, plus an iterable duplex object that offers a mechanism for writing and reading data, with back pressure. This module and test suite were heavily inspired by abstract-blob-store and interface-stream-muxer. The primary goal of this module is to enable developers to pick, swap or upgrade their connection without losing the same API expectations and mechanisms such as back pressure and the ability to half close a connection. Publishing a test suite as a module lets multiple modules ensure compatibility since they use the same test suite. -## Lead Maintainer - -[Jacob Heun](https://github.com/jacobheun/) - ## Usage ### Connection @@ -37,12 +24,12 @@ This helps ensuring that the transport is responsible for socket management, whi ### Test suite -#### JS - ```js +const tests = require('libp2p-interfaces/src/connection/tests') describe('your connection', () => { - require('interface-connection/src/tests')({ - async setup () { + tests({ + // Options should be passed to your connection + async setup (options) { return YourConnection }, async teardown () { @@ -52,10 +39,6 @@ describe('your connection', () => { }) ``` -#### Go - -> WIP - ## API ### Connection diff --git a/src/connection/test/connection.js b/src/connection/tests/connection.js similarity index 100% rename from src/connection/test/connection.js rename to src/connection/tests/connection.js diff --git a/src/connection/tests.js b/src/connection/tests/index.js similarity index 63% rename from src/connection/tests.js rename to src/connection/tests/index.js index 8a80dae..d008297 100644 --- a/src/connection/tests.js +++ b/src/connection/tests/index.js @@ -2,7 +2,7 @@ 'use strict' -const connectionSuite = require('../test/connection') +const connectionSuite = require('./connection') module.exports = (test) => { connectionSuite(test) diff --git a/src/connection/test/compliance.spec.js b/test/connection/compliance.spec.js similarity index 91% rename from src/connection/test/compliance.spec.js rename to test/connection/compliance.spec.js index decbdd2..fd4f994 100644 --- a/src/connection/test/compliance.spec.js +++ b/test/connection/compliance.spec.js @@ -1,9 +1,9 @@ /* eslint-env mocha */ 'use strict' -const tests = require('../src/tests') -const Connection = require('../src/connection') -const peers = require('./utils/peers') +const tests = require('../../src/connection/tests') +const { Connection } = require('../../src/connection') +const peers = require('../utils/peers') const PeerId = require('peer-id') const multiaddr = require('multiaddr') const pair = require('it-pair') diff --git a/src/connection/test/utils/peers.js b/test/utils/peers.js similarity index 100% rename from src/connection/test/utils/peers.js rename to test/utils/peers.js From 32f863be86e31e4f2afb261eb3e9f5ca7d7e33de Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 14:20:29 +0200 Subject: [PATCH 330/337] chore: clean up content routing --- src/connection/package.json | 66 -------------------------- src/content-routing/.gitignore | 59 ----------------------- src/content-routing/LICENSE | 22 --------- src/content-routing/README.md | 36 +------------- src/content-routing/package.json | 23 --------- src/content-routing/tests/base-test.js | 10 ---- src/content-routing/tests/index.js | 7 --- 7 files changed, 2 insertions(+), 221 deletions(-) delete mode 100644 src/connection/package.json delete mode 100644 src/content-routing/.gitignore delete mode 100644 src/content-routing/LICENSE delete mode 100644 src/content-routing/package.json delete mode 100644 src/content-routing/tests/base-test.js delete mode 100644 src/content-routing/tests/index.js diff --git a/src/connection/package.json b/src/connection/package.json deleted file mode 100644 index def4ae6..0000000 --- a/src/connection/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "name": "interface-connection", - "version": "0.4.1", - "description": "A test suite and interface you can use to implement a connection interface.", - "leadMaintainer": "Jacob Heun ", - "main": "src/index.js", - "files": [ - "dist", - "src" - ], - "scripts": { - "lint": "aegir lint", - "build": "aegir build", - "test": "aegir test", - "test:node": "aegir test -t node", - "test:browser": "aegir test -t browser -t webworker", - "release": "aegir release", - "release-minor": "aegir release --type minor", - "release-major": "aegir release --type major" - }, - "pre-push": [ - "lint" - ], - "repository": { - "type": "git", - "url": "https://github.com/libp2p/interface-connection.git" - }, - "keywords": [ - "IPFS" - ], - "license": "MIT", - "bugs": { - "url": "https://github.com/libp2p/interface-connection/issues" - }, - "homepage": "https://github.com/libp2p/interface-connection", - "dependencies": { - "abortable-iterator": "^2.1.0", - "chai": "^4.2.0", - "class-is": "^1.1.0", - "dirty-chai": "^2.0.1", - "err-code": "^2.0.0", - "multiaddr": "^7.1.0", - "peer-id": "~0.13.2", - "sinon": "^7.5.0" - }, - "devDependencies": { - "aegir": "^20.2.0", - "it-pair": "^1.0.0", - "it-pipe": "^1.0.1", - "mocha": "^6.2.0" - }, - "engines": { - "node": ">=10.0.0", - "npm": ">=6.0.0" - }, - "contributors": [ - "David Dias ", - "Friedel Ziegelmayer ", - "Greenkeeper ", - "Jacob Heun ", - "James Ray <16969914+jamesray1@users.noreply.github.com>", - "Pau Ramon Revilla ", - "Richard Littauer ", - "Vasco Santos " - ] -} diff --git a/src/content-routing/.gitignore b/src/content-routing/.gitignore deleted file mode 100644 index 00cbbdf..0000000 --- a/src/content-routing/.gitignore +++ /dev/null @@ -1,59 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - diff --git a/src/content-routing/LICENSE b/src/content-routing/LICENSE deleted file mode 100644 index c6e5dce..0000000 --- a/src/content-routing/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2018 David Dias - -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/src/content-routing/README.md b/src/content-routing/README.md index ddc4bad..d26d260 100644 --- a/src/content-routing/README.md +++ b/src/content-routing/README.md @@ -1,10 +1,7 @@ interface-content-routing ===================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) +**WIP: This module is not yet implemented** > A test suite and interface you can use to implement a Content Routing module for libp2p. @@ -12,12 +9,6 @@ The primary goal of this module is to enable developers to pick and swap their C Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. -The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. - -## Lead Maintainer - -[Vasco Santos](https://github.com/vasco-santos). - # Modules that implement the interface - [JavaScript libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht) @@ -34,26 +25,7 @@ Include this badge in your readme if you make a module that is compatible with t ## Node.js -```javascript -var tape = require('tape') -var tests = require('interface-content-routing/tests') -var yourImpl = require('../src') - -var common = { - setup: function (t, cb) { - cb(null, yourImpl) - }, - teardown: function (t, cb) { - cb() - } -} - -tests(tape, common) -``` - -## Go - -> WIP - The go-libp2p implementation does not have a test suite to be used, yet. +TBD # API @@ -61,8 +33,4 @@ A valid (read: that follows this abstraction) Content Routing module must implem ### `.findProviders` -- `JavaScript` peerRouting.findProviders - ### `.provide` - -- `JavaScript` peerRouting.provide diff --git a/src/content-routing/package.json b/src/content-routing/package.json deleted file mode 100644 index 0ff2db9..0000000 --- a/src/content-routing/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "interface-content-routing", - "version": "0.0.0", - "description": "A test suite and interface you can use to implement a Content Routing for libp2p.", - "leadMaintainer": "Vasco Santos ", - "repository": { - "type": "git", - "url": "https://github.com/libp2p/interface-content-routing.git" - }, - "keywords": [ - "IPFS" - ], - "author": "David Dias ", - "license": "MIT", - "bugs": { - "url": "https://github.com/libp2p/interface-content-routing/issues" - }, - "homepage": "https://github.com/libp2p/interface-content-routing", - "devDependencies": {}, - "dependencies": { - "timed-tape": "^0.1.1" - } -} diff --git a/src/content-routing/tests/base-test.js b/src/content-routing/tests/base-test.js deleted file mode 100644 index 3568674..0000000 --- a/src/content-routing/tests/base-test.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict' - -module.exports.all = function (test, common) { - test('test', function (t) { - common.setup(test, function (err, pr) { - if (err) {} - common.teardown() - }) - }) -} diff --git a/src/content-routing/tests/index.js b/src/content-routing/tests/index.js deleted file mode 100644 index 3c21b14..0000000 --- a/src/content-routing/tests/index.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict' -const timed = require('timed-tape') - -module.exports = function (test, common) { - test = timed(test) - require('./base-test.js').all(test, common) -} From f9f0b0902e449efd5c15f91656ad719fc95ab0f4 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 14:23:50 +0200 Subject: [PATCH 331/337] chore: cleanup peer disco and fix tests --- README.md | 6 +- package.json | 3 +- src/peer-discovery/.gitignore | 8 --- src/peer-discovery/.travis.yml | 40 ------------- src/peer-discovery/CHANGELOG.md | 20 ------- src/peer-discovery/LICENSE | 21 ------- src/peer-discovery/README.md | 9 --- src/peer-discovery/package.json | 58 ------------------- src/peer-discovery/{ => tests}/index.js | 0 .../peer-discovery}/compliance.spec.js | 2 +- .../peer-discovery}/mock-discovery.js | 0 11 files changed, 8 insertions(+), 159 deletions(-) delete mode 100644 src/peer-discovery/.gitignore delete mode 100644 src/peer-discovery/.travis.yml delete mode 100644 src/peer-discovery/CHANGELOG.md delete mode 100644 src/peer-discovery/LICENSE delete mode 100644 src/peer-discovery/package.json rename src/peer-discovery/{ => tests}/index.js (100%) rename {src/peer-discovery/test => test/peer-discovery}/compliance.spec.js (86%) rename {src/peer-discovery/test => test/peer-discovery}/mock-discovery.js (100%) diff --git a/README.md b/README.md index 73e6d3e..709963e 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,10 @@ > Contains test suites and interfaces you can use to implement the various components of libp2p. +## Lead Maintainer + +[Jacob Heun](https://github.com/jacobheun). + ## Interfaces - [Connection](./src/connection) @@ -19,7 +23,7 @@ ### Origin Repositories -For posterity, here is a link to the original repositories for each of the interfaces (if they had one). +For posterity, here are links to the original repositories for each of the interfaces (if they had one). - [Connection](https://github.com/libp2p/interface-connection) - [Content Routing](https://github.com/libp2p/interface-content-routing) - [Peer Discovery](https://github.com/libp2p/interface-peer-discovery) diff --git a/package.json b/package.json index af725ab..bdb70ee 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "devDependencies": { "aegir": "^20.4.1", "it-pair": "^1.0.0", - "it-pipe": "^1.0.1" + "it-pipe": "^1.0.1", + "peer-info": "^0.17.0" } } diff --git a/src/peer-discovery/.gitignore b/src/peer-discovery/.gitignore deleted file mode 100644 index fd34c26..0000000 --- a/src/peer-discovery/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -**/node_modules/ -**/*.log -package-lock.json - -# Coverage directory used by tools like istanbul -coverage -docs -dist diff --git a/src/peer-discovery/.travis.yml b/src/peer-discovery/.travis.yml deleted file mode 100644 index c7f74c1..0000000 --- a/src/peer-discovery/.travis.yml +++ /dev/null @@ -1,40 +0,0 @@ -language: node_js -cache: npm -stages: - - check - - test - - cov - -node_js: - - '10' - - '12' - -os: - - linux - - osx - - windows - -script: npx nyc -s npm run test:node -- --bail -after_success: npx nyc report --reporter=text-lcov > coverage.lcov && npx codecov - -jobs: - include: - - stage: check - script: - - npx aegir dep-check - - npm run lint - - - stage: test - name: chrome - addons: - chrome: stable - script: npx aegir test -t browser -t webworker - - - stage: test - name: firefox - addons: - firefox: latest - script: npx aegir test -t browser -t webworker -- --browsers FirefoxHeadless - -notifications: - email: false diff --git a/src/peer-discovery/CHANGELOG.md b/src/peer-discovery/CHANGELOG.md deleted file mode 100644 index 79bc3d7..0000000 --- a/src/peer-discovery/CHANGELOG.md +++ /dev/null @@ -1,20 +0,0 @@ - -## [0.1.1](https://github.com/libp2p/interface-peer-discovery/compare/v0.1.0...v0.1.1) (2019-09-27) - - -### Bug Fixes - -* add async support to setup ([#11](https://github.com/libp2p/interface-peer-discovery/issues/11)) ([2814c76](https://github.com/libp2p/interface-peer-discovery/commit/2814c76)) - - - - -# [0.1.0](https://github.com/libp2p/interface-peer-discovery/compare/v0.0.1...v0.1.0) (2019-09-27) - - - - -## 0.0.1 (2017-02-09) - - - diff --git a/src/peer-discovery/LICENSE b/src/peer-discovery/LICENSE deleted file mode 100644 index 7789aab..0000000 --- a/src/peer-discovery/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2016 libp2p - -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/src/peer-discovery/README.md b/src/peer-discovery/README.md index 265cf45..74bb96c 100644 --- a/src/peer-discovery/README.md +++ b/src/peer-discovery/README.md @@ -1,11 +1,6 @@ interface-peer-discovery ======================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) - > A test suite and interface you can use to implement a Peer Discovery module for libp2p. The primary goal of this module is to enable developers to pick and/or swap their Peer Discovery modules as they see fit for their application, without having to go through shims or compatibility issues. This module and test suite was heavily inspired by [abstract-blob-store](https://github.com/maxogden/abstract-blob-store). @@ -14,10 +9,6 @@ Publishing a test suite as a module lets multiple modules all ensure compatibili The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. -## Lead Maintainer - -[Vasco Santos](https://github.com/vasco-santos). - ## Modules that implement the interface - [JavaScript libp2p-mdns](https://github.com/libp2p/js-libp2p-mdns) diff --git a/src/peer-discovery/package.json b/src/peer-discovery/package.json deleted file mode 100644 index e897719..0000000 --- a/src/peer-discovery/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "interface-discovery", - "version": "0.1.1", - "description": "A test suite and interface you can use to implement a discovery interface.", - "leadMaintainer": "Vasco Santos ", - "main": "src/index.js", - "scripts": { - "lint": "aegir lint", - "build": "aegir build", - "test": "aegir test", - "test:node": "aegir test -t node", - "test:browser": "aegir test -t browser -t webworker", - "release": "aegir release", - "release-minor": "aegir release --type minor", - "release-major": "aegir release --type major" - }, - "pre-push": [ - "lint" - ], - "repository": { - "type": "git", - "url": "https://github.com/libp2p/interface-peer-discovery.git" - }, - "keywords": [ - "libp2p", - "network", - "p2p", - "peer", - "discovery", - "peer-to-peer", - "IPFS" - ], - "author": "David Dias ", - "license": "MIT", - "bugs": { - "url": "https://github.com/libp2p/interface-peer-discovery/issues" - }, - "homepage": "https://github.com/libp2p/interface-peer-discovery", - "dependencies": {}, - "devDependencies": { - "aegir": "^20.3.1", - "chai": "^4.2.0", - "dirty-chai": "^2.0.1", - "peer-id": "^0.13.3", - "peer-info": "^0.17.0" - }, - "engines": { - "node": ">=10.0.0", - "npm": ">=6.0.0" - }, - "contributors": [ - "David Dias ", - "Jacob Heun ", - "Mike Goelzer ", - "Vasco Santos ", - "Vasco Santos " - ] -} diff --git a/src/peer-discovery/index.js b/src/peer-discovery/tests/index.js similarity index 100% rename from src/peer-discovery/index.js rename to src/peer-discovery/tests/index.js diff --git a/src/peer-discovery/test/compliance.spec.js b/test/peer-discovery/compliance.spec.js similarity index 86% rename from src/peer-discovery/test/compliance.spec.js rename to test/peer-discovery/compliance.spec.js index 5b54fba..6602f09 100644 --- a/src/peer-discovery/test/compliance.spec.js +++ b/test/peer-discovery/compliance.spec.js @@ -1,7 +1,7 @@ /* eslint-env mocha */ 'use strict' -const tests = require('../src') +const tests = require('../../src/peer-discovery/tests') const MockDiscovery = require('./mock-discovery') describe('compliance tests', () => { diff --git a/src/peer-discovery/test/mock-discovery.js b/test/peer-discovery/mock-discovery.js similarity index 100% rename from src/peer-discovery/test/mock-discovery.js rename to test/peer-discovery/mock-discovery.js From 606d6a6815608027cfde5bb799a6996ca8e3d211 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 14:25:47 +0200 Subject: [PATCH 332/337] chore: cleanup peer routing --- src/content-routing/README.md | 1 - src/peer-routing/.gitignore | 27 ----------------------- src/peer-routing/LICENSE | 22 ------------------- src/peer-routing/README.md | 34 ++--------------------------- src/peer-routing/package.json | 24 -------------------- src/peer-routing/tests/base-test.js | 15 ------------- src/peer-routing/tests/index.js | 6 ----- 7 files changed, 2 insertions(+), 127 deletions(-) delete mode 100644 src/peer-routing/.gitignore delete mode 100644 src/peer-routing/LICENSE delete mode 100644 src/peer-routing/package.json delete mode 100644 src/peer-routing/tests/base-test.js delete mode 100644 src/peer-routing/tests/index.js diff --git a/src/content-routing/README.md b/src/content-routing/README.md index d26d260..24eba48 100644 --- a/src/content-routing/README.md +++ b/src/content-routing/README.md @@ -13,7 +13,6 @@ Publishing a test suite as a module lets multiple modules all ensure compatibili - [JavaScript libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht) - [JavaScript libp2p-delegated-peer-routing](https://github.com/libp2p/js-libp2p-delegated-peer-routing) -- [JavaScript libp2p-kad-routing](https://github.com/libp2p/js-libp2p-kad-routing) # Badge diff --git a/src/peer-routing/.gitignore b/src/peer-routing/.gitignore deleted file mode 100644 index 123ae94..0000000 --- a/src/peer-routing/.gitignore +++ /dev/null @@ -1,27 +0,0 @@ -# Logs -logs -*.log - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git -node_modules diff --git a/src/peer-routing/LICENSE b/src/peer-routing/LICENSE deleted file mode 100644 index 59a33ba..0000000 --- a/src/peer-routing/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 David Dias - -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/src/peer-routing/README.md b/src/peer-routing/README.md index 038abab..7e28c2d 100644 --- a/src/peer-routing/README.md +++ b/src/peer-routing/README.md @@ -1,11 +1,7 @@ interface-peer-routing ===================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) -[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) +**WIP: This module is not yet implemented** > A test suite and interface you can use to implement a Peer Routing module for libp2p. @@ -13,17 +9,10 @@ The primary goal of this module is to enable developers to pick and swap their P Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. -The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. - -## Lead Maintainer - -[Vasco Santos](https://github.com/vasco-santos). - # Modules that implement the interface - [JavaScript libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht) - [JavaScript libp2p-delegated-peer-routing](https://github.com/libp2p/js-libp2p-delegated-peer-routing) -- [JavaScript libp2p-kad-routing](https://github.com/libp2p/js-libp2p-kad-routing) # Badge @@ -35,26 +24,7 @@ Include this badge in your readme if you make a module that is compatible with t ## Node.js -```javascript -var tape = require('tape') -var tests = require('interface-peer-routing/tests') -var YourPeerRouter = require('../src') - -var common = { - setup: function (t, cb) { - cb(null, YourPeerRouter) - }, - teardown: function (t, cb) { - cb() - } -} - -tests(tape, common) -``` - -## Go - -> WIP - The go-libp2p implementation does not have a test suite to be used, yet. +TBD # API diff --git a/src/peer-routing/package.json b/src/peer-routing/package.json deleted file mode 100644 index 04fcf4c..0000000 --- a/src/peer-routing/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "interface-peer-routing", - "version": "0.1.3", - "description": "A test suite and interface you can use to implement a Peer Routing for libp2p.", - "leadMaintainer": "Vasco Santos ", - "repository": { - "type": "git", - "url": "https://github.com/diasdavid/interface-peer-routing.git" - }, - "keywords": [ - "IPFS" - ], - "author": "David Dias ", - "license": "MIT", - "bugs": { - "url": "https://github.com/diasdavid/interface-peer-routing/issues" - }, - "homepage": "https://github.com/diasdavid/interface-peer-routing", - "devDependencies": {}, - "dependencies": { - "peer-id": "~0.12.2", - "timed-tape": "^0.1.1" - } -} diff --git a/src/peer-routing/tests/base-test.js b/src/peer-routing/tests/base-test.js deleted file mode 100644 index 3768f1d..0000000 --- a/src/peer-routing/tests/base-test.js +++ /dev/null @@ -1,15 +0,0 @@ -var Id = require('peer-id') - -module.exports.all = function (test, common) { - test('Simple findPeers test', function (t) { - common.setup(test, function (err, pr) { - t.plan(3) - t.ifError(err) - pr.findPeers(Id.create().toBytes(), function (err, peerQueue) { - t.ifError(err) - t.equal(peerQueue.length >= 1, true) - common.teardown() - }) - }) - }) -} diff --git a/src/peer-routing/tests/index.js b/src/peer-routing/tests/index.js deleted file mode 100644 index b232406..0000000 --- a/src/peer-routing/tests/index.js +++ /dev/null @@ -1,6 +0,0 @@ -var timed = require('timed-tape') - -module.exports = function (test, common) { - test = timed(test) - require('./base-test.js').all(test, common) -} From 46eac3962656a7a97757323d0ca70edade1514bf Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 14:31:00 +0200 Subject: [PATCH 333/337] chore: remove record-store, it is old --- README.md | 2 - src/record-store/.gitignore | 27 --------- src/record-store/LICENSE | 22 ------- src/record-store/README.md | 87 --------------------------- src/record-store/img/badge.png | Bin 7315 -> 0 bytes src/record-store/img/badge.sketch | Bin 49152 -> 0 bytes src/record-store/img/badge.svg | 18 ------ src/record-store/package.json | 31 ---------- src/record-store/tests/base-test.js | 90 ---------------------------- src/record-store/tests/index.js | 6 -- 10 files changed, 283 deletions(-) delete mode 100644 src/record-store/.gitignore delete mode 100644 src/record-store/LICENSE delete mode 100644 src/record-store/README.md delete mode 100644 src/record-store/img/badge.png delete mode 100644 src/record-store/img/badge.sketch delete mode 100644 src/record-store/img/badge.svg delete mode 100644 src/record-store/package.json delete mode 100644 src/record-store/tests/base-test.js delete mode 100644 src/record-store/tests/index.js diff --git a/README.md b/README.md index 709963e..c0b7980 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,6 @@ - [Content Routing](./src/content-routing) - [Peer Discovery](./src/peer-discovery) - [Peer Routing](./src/peer-routing) -- [Record Store](./src/record-store) - [Stream Muxer](./src/stream-muxer) - [Transport](./src/transport) @@ -28,7 +27,6 @@ For posterity, here are links to the original repositories for each of the inter - [Content Routing](https://github.com/libp2p/interface-content-routing) - [Peer Discovery](https://github.com/libp2p/interface-peer-discovery) - [Peer Routing](https://github.com/libp2p/interface-peer-routing) -- [Record Store](https://github.com/libp2p/interface-record-store) - [Stream Muxer](https://github.com/libp2p/interface-stream-muxer) - [Transport](https://github.com/libp2p/interface-transport) diff --git a/src/record-store/.gitignore b/src/record-store/.gitignore deleted file mode 100644 index 123ae94..0000000 --- a/src/record-store/.gitignore +++ /dev/null @@ -1,27 +0,0 @@ -# Logs -logs -*.log - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git -node_modules diff --git a/src/record-store/LICENSE b/src/record-store/LICENSE deleted file mode 100644 index 59a33ba..0000000 --- a/src/record-store/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 David Dias - -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/src/record-store/README.md b/src/record-store/README.md deleted file mode 100644 index 26320a6..0000000 --- a/src/record-store/README.md +++ /dev/null @@ -1,87 +0,0 @@ -interface-record-store -===================== - -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) - -> A test suite and interface you can use to implement a a [IPRS compliant](/IPRS.md) Record Store. - -The primary goal of this module is to enable developers to pick and swap their Record Store module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by [`abstract-blob-store`](https://github.com/maxogden/abstract-blob-store) and [`interface-stream-muxer`](https://github.com/libp2p/interface-stream-muxer). - -Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. - -The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. - -## Lead Maintainer - -[Vasco Santos](https://github.com/vasco-santos). - -# Modules that implement the interface - -- [ipfs-distributed-record-store](https://github.com/libp2p/js-libp2p-distributed-record-store) -- [ipfs-kad-record-store](https://github.com/libp2p/js-libp2p-kad-record-store) - -# Badge - -Include this badge in your readme if you make a module that is compatible with the interface-record-store API. You can validate this by running the tests. - -![](https://raw.githubusercontent.com/diasdavid/interface-record-store/master/img/badge.png) - -# How to use the battery of tests - -## Node.js - -``` -var tape = require('tape') -var tests = require('interface-record-store/tests') -var YourRecordStore = require('../src') - -var common = { - setup: function (t, cb) { - cb(null, YourRecordStore) - }, - teardown: function (t, cb) { - cb() - } -} - -tests(tape, common) -``` - -## Go - -> WIP - -# API - -A valid (read: that follows this abstraction) stream muxer, must implement the following API. - -### Obtain a Record - -- `Node.js` rs.get(key, function (err, records) {}) - -This method returns an array of records, found in the Record Store. - -If `err` is passed, `records` will be a `undefined` value. - -`key` is a multihash value that represents any arbitraty random value, that may have records associated with it. - -### Store a Record - -- `Node.js` rs.put(key, recordSignatureMultiHash, function (err) {}) - -`recordSignatureMultihash` is multihash of the Record Signature MerkleDAG obj, as described by IPRS - InterPlanetary Record Spec - -if `err` is passed, means that the record wasn't stored properly or it was unvalid. - -### Implementation considerations - - -- the key is a multihash but not necessarily the hash of the record signature object. -- a DRS instance must have a mapping of key->[hash(recordSignature)] to know which records belong to a given key (provided value) -- DRS implements the interface-record-store interface -- DRS may levarage other implementations of interface-record-store to find records in the network or other storage mechanisms -- DRS should return every valid record it can find in a query -- all unvalid records detected in the process should be discarded/deleted diff --git a/src/record-store/img/badge.png b/src/record-store/img/badge.png deleted file mode 100644 index 2f1a460730c7332353e4ee236fa085b781a2bcd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7315 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 t9wX?N-0sKTS7oWN<>nT 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 - - - badge - Created with Sketch. - - - - - Record Store - - - Compatibl - e - - - - \ No newline at end of file diff --git a/src/record-store/package.json b/src/record-store/package.json deleted file mode 100644 index c66ae37..0000000 --- a/src/record-store/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "interface-record-store", - "version": "0.1.3", - "description": "A test suite and interface you can use to implement a a IPRS compliant(https://github.com/ipfs/specs/tree/master/records) Record Store", - "leadMaintainer": "Vasco Santos ", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "https://github.com/libp2p/interface-record-store.git" - }, - "keywords": [ - "IPFS" - ], - "engines": { - "node": "^4.0.0" - }, - "author": "David Dias ", - "license": "MIT", - "bugs": { - "url": "https://github.com/libp2p/interface-record-store/issues" - }, - "homepage": "https://github.com/libp2p/interface-record-store", - "dependencies": { - "ecdsa": "~0.7.0", - "ipld": "~0.22.0", - "multihashing": "~0.3.3", - "timed-tape": "~0.1.1" - } -} diff --git a/src/record-store/tests/base-test.js b/src/record-store/tests/base-test.js deleted file mode 100644 index ba8d22c..0000000 --- a/src/record-store/tests/base-test.js +++ /dev/null @@ -1,90 +0,0 @@ -var crypto = require('crypto') -var multihashing = require('multihashing') -var ipld = require('ipld') -var ecdsa = require('ecdsa') - -module.exports.all = function (test, common) { - - test('Store a valid record', function (t) { - common.setup(test, function (err, recordStore) { - t.ifError(err, 'Should not throw') - - var mdagStore = recordStore.mdagStore - - var ecdh = crypto.createECDH('secp256k1') - ecdh.generateKeys() - - var mdagObj_pubKey = { - '@context': ipld.context.merkleweb, - algorithm: { - mlink: 'secp256k1' - }, - encoding: { - mlink: 'raw' - }, - bytes: ecdh.getPublicKey() - } - - var mdagObj_pubKey_encoded = ipld.marshal(mdagObj_pubKey) - var mdagObj_pubKey_mh = multihashing(mdagObj_pubKey_encoded, 'sha2-256') - mdagStore.put(mdagObj_pubKey, mdagObj_pubKey_mh) - - var current = new Date() - - var mdagObj_record = { - '@context': ipld.context.merkleweb, - scheme: { - mlink: 'type-a' - }, - expires: (new Date()).setDate(current.getDate() + 1), - value: 'aaah the data!' - } - - var mdagObj_record_encoded = ipld.marshal(mdagObj_record) - var mdagObj_record_mh = multihashing(mdagObj_record_encoded, 'sha2-256') - mdagStore.put(mdagObj_record, mdagObj_record_mh) - - var mdagObj_record_encoded_hash = crypto.createHash('sha256').update(mdagObj_record_encoded).digest() - var record_signed = ecdsa.sign(mdagObj_record_encoded_hash, ecdh.getPrivateKey()) - - var mdagObj_record_signature = { - '@context': ipld.context.merkleweb, - pubKey: { - mlink: mdagObj_pubKey_mh - }, - algorithm: { - mlink: 'secp256k1' - }, - encoding: { - mlink: 'binary' - }, - signee: { - mlink: mdagObj_record_mh - }, - bytes: record_signed - } - - var mdagObj_record_signature_encoded = ipld.marshal(mdagObj_record_signature) - var mdagObj_record_signature_encoded_mh = multihashing(mdagObj_record_signature_encoded, 'sha2-256') - - mdagStore.put(mdagObj_record_signature, mdagObj_record_signature_encoded_mh) - - recordStore.put('bananas', mdagObj_record_signature, function (err) { - t.ifError(err, 'Should not throw') - recordStore.get('bananas', function (err, records) { - t.ifError(err, 'Should not throw') - t.equal(records.length, 1) - t.pass('record was stored successfully') - t.end() - }) - - }) - }) - }) - - // test('Store an unvalid record') - // test('Store and retrieve a valid record') - // test('Store a bunch of valid and unvalid records and check what gets retrieved') - // test('Store a bunch of records with variable validity, wait for some to expire, check what gets retrieved') - -} diff --git a/src/record-store/tests/index.js b/src/record-store/tests/index.js deleted file mode 100644 index b232406..0000000 --- a/src/record-store/tests/index.js +++ /dev/null @@ -1,6 +0,0 @@ -var timed = require('timed-tape') - -module.exports = function (test, common) { - test = timed(test) - require('./base-test.js').all(test, common) -} From 101cf22cc92bf3ff8a51eefe70733032dbcf34c8 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 14:39:26 +0200 Subject: [PATCH 334/337] chore: clean up stream-muxer --- src/stream-muxer/.gitignore | 35 ---- src/stream-muxer/.npmignore | 34 ---- src/stream-muxer/.travis.yml | 17 -- src/stream-muxer/CHANGELOG.md | 173 ------------------ src/stream-muxer/LICENSE | 22 --- src/stream-muxer/README.md | 73 +------- src/stream-muxer/package.json | 63 ------- src/stream-muxer/test/stream-muxer.spec.js | 1 - src/stream-muxer/{ => tests}/base-test.js | 0 src/stream-muxer/{ => tests}/close-test.js | 0 src/stream-muxer/{ => tests}/index.js | 0 .../{ => tests}/mega-stress-test.js | 0 src/stream-muxer/{ => tests}/spawner.js | 0 src/stream-muxer/{ => tests}/stress-test.js | 0 14 files changed, 8 insertions(+), 410 deletions(-) delete mode 100644 src/stream-muxer/.gitignore delete mode 100644 src/stream-muxer/.npmignore delete mode 100644 src/stream-muxer/.travis.yml delete mode 100644 src/stream-muxer/CHANGELOG.md delete mode 100644 src/stream-muxer/LICENSE delete mode 100644 src/stream-muxer/package.json delete mode 100644 src/stream-muxer/test/stream-muxer.spec.js rename src/stream-muxer/{ => tests}/base-test.js (100%) rename src/stream-muxer/{ => tests}/close-test.js (100%) rename src/stream-muxer/{ => tests}/index.js (100%) rename src/stream-muxer/{ => tests}/mega-stress-test.js (100%) rename src/stream-muxer/{ => tests}/spawner.js (100%) rename src/stream-muxer/{ => tests}/stress-test.js (100%) diff --git a/src/stream-muxer/.gitignore b/src/stream-muxer/.gitignore deleted file mode 100644 index aadc853..0000000 --- a/src/stream-muxer/.gitignore +++ /dev/null @@ -1,35 +0,0 @@ -**/node_modules/ -**/*.log -test/repo-tests* - -# Logs -logs -*.log - -coverage - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -build - -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git -node_modules - -dist -package-lock.json diff --git a/src/stream-muxer/.npmignore b/src/stream-muxer/.npmignore deleted file mode 100644 index 59335fd..0000000 --- a/src/stream-muxer/.npmignore +++ /dev/null @@ -1,34 +0,0 @@ -**/node_modules/ -**/*.log -test/repo-tests* - -# Logs -logs -*.log - -coverage - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -build - -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git -node_modules - -test diff --git a/src/stream-muxer/.travis.yml b/src/stream-muxer/.travis.yml deleted file mode 100644 index f38be03..0000000 --- a/src/stream-muxer/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -language: node_js -cache: npm -stages: - - check - -node_js: - - '10' - -jobs: - include: - - stage: check - script: - - npx aegir dep-check - - npm run lint - -notifications: - email: false diff --git a/src/stream-muxer/CHANGELOG.md b/src/stream-muxer/CHANGELOG.md deleted file mode 100644 index 178d557..0000000 --- a/src/stream-muxer/CHANGELOG.md +++ /dev/null @@ -1,173 +0,0 @@ - -# [0.8.0](https://github.com/libp2p/interface-stream-muxer/compare/v0.7.0...v0.8.0) (2019-09-20) - - -### Features - -* add onStreamEnd, muxer.streams and timeline ([#56](https://github.com/libp2p/interface-stream-muxer/issues/56)) ([0f60832](https://github.com/libp2p/interface-stream-muxer/commit/0f60832)) - - -### BREAKING CHANGES - -* This adds new validations to the stream muxer, which will cause existing tests to fail. - - - - -# [0.7.0](https://github.com/libp2p/interface-stream-muxer/compare/v0.6.0...v0.7.0) (2019-09-16) - - -### Code Refactoring - -* API changes and switch to async await ([#55](https://github.com/libp2p/interface-stream-muxer/issues/55)) ([dd837ba](https://github.com/libp2p/interface-stream-muxer/commit/dd837ba)) - - -### BREAKING CHANGES - -* the API is now async / await. See https://github.com/libp2p/interface-stream-muxer/pull/55#issue-275014779 for a summary of the changes. - - - - -# [0.6.0](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.9...v0.6.0) (2018-11-13) - - -### Bug Fixes - -* improve the close test ([d9c8681](https://github.com/libp2p/interface-stream-muxer/commit/d9c8681)) - - - - -## [0.5.9](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.8...v0.5.9) (2017-12-14) - - - - -## [0.5.8](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.7...v0.5.8) (2017-12-14) - - - - -## [0.5.7](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.6...v0.5.7) (2017-03-16) - - - - -## [0.5.6](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.5...v0.5.6) (2017-02-09) - - - - -## [0.5.5](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.4...v0.5.5) (2017-01-24) - - -### Bug Fixes - -* when things are in the same process, there is a order to them :) ([1635977](https://github.com/libp2p/interface-stream-muxer/commit/1635977)) - - - - -## [0.5.4](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.3...v0.5.4) (2017-01-20) - - -### Bug Fixes - -* avoid making webpacky funky by not trying to inject tcp ([6695b80](https://github.com/libp2p/interface-stream-muxer/commit/6695b80)) - - - - -## [0.5.3](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.2...v0.5.3) (2017-01-19) - - - - -## [0.5.2](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.1...v0.5.2) (2017-01-19) - - - - -## [0.5.1](https://github.com/libp2p/interface-stream-muxer/compare/v0.5.0...v0.5.1) (2017-01-16) - - -### Bug Fixes - -* some fixes for incorrect tests ([23a75d1](https://github.com/libp2p/interface-stream-muxer/commit/23a75d1)) - - - - -# [0.5.0](https://github.com/libp2p/interface-stream-muxer/compare/v0.4.0...v0.5.0) (2016-11-03) - - -### Features - -* move to next aegir ([11980ac](https://github.com/libp2p/interface-stream-muxer/commit/11980ac)) - - - - -# [0.4.0](https://github.com/libp2p/interface-stream-muxer/compare/v0.3.1...v0.4.0) (2016-09-06) - - -### Features - -* **api:** update the interface usage from dial to dialer and listen to listener ([5069679](https://github.com/libp2p/interface-stream-muxer/commit/5069679)) -* **pull:** migration to pull streams. Upgrade tests to use mocha as ([cc3130f](https://github.com/libp2p/interface-stream-muxer/commit/cc3130f)) -* **tests:** add closing tests, make sure errors are propagated ([c06da3b](https://github.com/libp2p/interface-stream-muxer/commit/c06da3b)) -* **tests:** stub test for aegir to verify ([949faf0](https://github.com/libp2p/interface-stream-muxer/commit/949faf0)) - - - - -## [0.3.1](https://github.com/libp2p/interface-stream-muxer/compare/v0.3.0...v0.3.1) (2016-03-06) - - - - -# [0.3.0](https://github.com/libp2p/interface-stream-muxer/compare/v0.2.5...v0.3.0) (2016-03-06) - - - - -## [0.2.5](https://github.com/libp2p/interface-stream-muxer/compare/v0.2.4...v0.2.5) (2015-12-12) - - - - -## [0.2.4](https://github.com/libp2p/interface-stream-muxer/compare/v0.2.3...v0.2.4) (2015-07-22) - - - - -## [0.2.3](https://github.com/libp2p/interface-stream-muxer/compare/v0.2.2...v0.2.3) (2015-07-15) - - - - -## [0.2.2](https://github.com/libp2p/interface-stream-muxer/compare/v0.2.1...v0.2.2) (2015-07-15) - - - - -## [0.2.1](https://github.com/libp2p/interface-stream-muxer/compare/v0.2.0...v0.2.1) (2015-07-14) - - - - -# [0.2.0](https://github.com/libp2p/interface-stream-muxer/compare/v0.1.1...v0.2.0) (2015-07-14) - - - - -## [0.1.1](https://github.com/libp2p/interface-stream-muxer/compare/v0.1.0...v0.1.1) (2015-07-14) - - - - -# 0.1.0 (2015-07-13) - - - diff --git a/src/stream-muxer/LICENSE b/src/stream-muxer/LICENSE deleted file mode 100644 index 59a33ba..0000000 --- a/src/stream-muxer/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 David Dias - -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/src/stream-muxer/README.md b/src/stream-muxer/README.md index 7d69425..f50d680 100644 --- a/src/stream-muxer/README.md +++ b/src/stream-muxer/README.md @@ -1,13 +1,5 @@ # interface-stream-muxer -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) -[![](https://img.shields.io/travis/libp2p/interface-stream-muxer.svg?style=flat-square)](https://travis-ci.com/libp2p/interface-stream-muxer) -[![Dependency Status](https://david-dm.org/libp2p/interface-stream-muxer.svg?style=flat-square)](https://david-dm.org/libp2p/interface-stream-muxer) -[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) - > A test suite and interface you can use to implement a stream muxer. "A one stop shop for all your muxing needs" The primary goal of this module is to enable developers to pick and swap their stream muxing module as they see fit for their application, without having to go through shims or compatibility issues. This module and test suite was heavily inspired by [abstract-blob-store](https://github.com/maxogden/abstract-blob-store). @@ -16,15 +8,10 @@ Publishing a test suite as a module lets multiple modules all ensure compatibili The API is presented with both Node.js and Go primitives, however, there is no actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through different stacks. -## Lead Maintainer - -[Jacob Heun](https://github.com/jacobheun/) - ## Modules that implement the interface -- [JavaScript libp2p-spdy](https://github.com/libp2p/js-libp2p-spdy) -- [JavaScript libp2p-mplex](https://github.com/libp2p/js-libp2p-mplex) -- [Go spdy, muxado, yamux and multiplex](https://github.com/jbenet/go-stream-muxer) +- [js-libp2p-spdy](https://github.com/libp2p/js-libp2p-spdy) +- [js-libp2p-mplex](https://github.com/libp2p/js-libp2p-mplex) Send a PR to add a new one if you happen to find or write one. @@ -36,12 +23,10 @@ Include this badge in your readme if you make a new module that uses interface-s ## Usage -### JS - Install `interface-stream-muxer` as one of the dependencies of your project and as a test file. Then, using `mocha` (for JavaScript) or a test runner with compatible API, do: ```js -const test = require('interface-stream-muxer') +const test = require('libp2p-interfaces/src/stream-muxer/tests') const common = { async setup () { @@ -56,17 +41,11 @@ const common = { test(common) ``` -### Go - -> WIP - ## API -### JS - A valid (one that follows this abstraction) stream muxer, must implement the following API: -#### `const muxer = new Muxer([options])` +### `const muxer = new Muxer([options])` Create a new _duplex_ stream that can be piped together with a connection in order to allow multiplexed communications. @@ -124,7 +103,7 @@ pipe(conn, muxer, conn) // conn is duplex connection to another peer ``` * `maxMsgSize` - The maximum size in bytes the data field of multiplexed messages may contain (default 1MB) -#### `muxer.onStream` +### `muxer.onStream` Use this property as an alternative to passing `onStream` as an option to the `Muxer` constructor. @@ -134,7 +113,7 @@ const muxer = new Muxer() muxer.onStream = stream => { /* ... */ } ``` -#### `muxer.onStreamEnd` +### `muxer.onStreamEnd` Use this property as an alternative to passing `onStreamEnd` as an option to the `Muxer` constructor. @@ -144,7 +123,7 @@ const muxer = new Muxer() muxer.onStreamEnd = stream => { /* ... */ } ``` -#### `const stream = muxer.newStream([options])` +### `const stream = muxer.newStream([options])` Initiate a new stream with the remote. Returns a [duplex stream](https://gist.github.com/alanshaw/591dc7dd54e4f99338a347ef568d6ee9#duplex-it). @@ -158,7 +137,7 @@ const stream = muxer.newStream() pipe([1, 2, 3], stream, consume) ``` -#### `const streams = muxer.streams` +### `const streams = muxer.streams` The streams property returns an array of streams the muxer currently has open. Closed streams will not be returned. @@ -168,39 +147,3 @@ muxer.streams.map(stream => { console.log(stream.id) }) ``` - -### Go - -#### Attach muxer to a Connection - -```go -muxedConn, err := muxer.Attach(conn, isListener) -``` - -This method attaches our stream muxer to an instance of [Connection](https://github.com/libp2p/interface-connection/blob/master/src/connection.js) defined by [interface-connection](https://github.com/libp2p/interface-connection). - -If `err` is passed, no operation should be made in `conn`. - -`isListener` is a bool that tells the side of the socket we are, `isListener = true` for listener/server and `isListener = false` for dialer/client side. - -`muxedConn` interfaces our established Connection with the other endpoint, it must offer an interface to open a stream inside this connection and to receive incomming stream requests. - -#### Dial(open/create) a new stream - -```go -stream, err := muxedConn.newStream() -``` - -This method negotiates and opens a new stream with the other endpoint. - -If `err` is passed, no operation should be made in `stream`. - -`stream` interface our established Stream with the other endpoint, it must implement the [ReadWriteCloser](http://golang.org/pkg/io/#ReadWriteCloser). - -#### Listen(wait/accept) a new incoming stream - -```go -stream := muxedConn.Accept() -``` - -Each time a dialing peer initiates the new stream handshake, a new stream is created on the listening side. diff --git a/src/stream-muxer/package.json b/src/stream-muxer/package.json deleted file mode 100644 index e4fb95b..0000000 --- a/src/stream-muxer/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "interface-stream-muxer", - "version": "0.8.0", - "description": "A test suite and interface you can use to implement a stream muxer.", - "leadMaintainer": "Jacob Heun ", - "main": "src/index.js", - "browser": { - "libp2p-tcp": false - }, - "scripts": { - "test": "node -e 'process.exit()'", - "test:node": "node -e 'process.exit()'", - "build": "aegir build -t node", - "lint": "aegir lint", - "release": "aegir release -t node", - "release-minor": "aegir release -t node --type minor", - "release-major": "aegir release -t node --type major", - "coverage": "node -e 'process.exit()'", - "coverage-publish": "node -e 'process.exit()'" - }, - "repository": { - "type": "git", - "url": "https://github.com/libp2p/interface-stream-muxer.git" - }, - "keywords": [ - "Streams", - "Muxer", - "Interface" - ], - "license": "MIT", - "bugs": { - "url": "https://github.com/libp2p/interface-stream-muxer/issues" - }, - "homepage": "https://github.com/libp2p/interface-stream-muxer", - "dependencies": { - "abort-controller": "^3.0.0", - "abortable-iterator": "^2.1.0", - "chai": "^4.2.0", - "chai-checkmark": "^1.0.1", - "detect-node": "^2.0.4", - "it-pair": "^1.0.0", - "it-pipe": "^1.0.1", - "libp2p-tcp": "^0.14.0", - "multiaddr": "^7.1.0", - "p-limit": "^2.2.0", - "streaming-iterables": "^4.1.0" - }, - "devDependencies": { - "aegir": "^20.0.0" - }, - "contributors": [ - "Alan Shaw ", - "David Dias ", - "David Dias ", - "Dmitriy Ryajov ", - "Friedel Ziegelmayer ", - "Jacob Heun ", - "Jeffrey Hulten ", - "Vasco Santos ", - "greenkeeperio-bot ", - "ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ " - ] -} diff --git a/src/stream-muxer/test/stream-muxer.spec.js b/src/stream-muxer/test/stream-muxer.spec.js deleted file mode 100644 index ccacec3..0000000 --- a/src/stream-muxer/test/stream-muxer.spec.js +++ /dev/null @@ -1 +0,0 @@ -'use strict' diff --git a/src/stream-muxer/base-test.js b/src/stream-muxer/tests/base-test.js similarity index 100% rename from src/stream-muxer/base-test.js rename to src/stream-muxer/tests/base-test.js diff --git a/src/stream-muxer/close-test.js b/src/stream-muxer/tests/close-test.js similarity index 100% rename from src/stream-muxer/close-test.js rename to src/stream-muxer/tests/close-test.js diff --git a/src/stream-muxer/index.js b/src/stream-muxer/tests/index.js similarity index 100% rename from src/stream-muxer/index.js rename to src/stream-muxer/tests/index.js diff --git a/src/stream-muxer/mega-stress-test.js b/src/stream-muxer/tests/mega-stress-test.js similarity index 100% rename from src/stream-muxer/mega-stress-test.js rename to src/stream-muxer/tests/mega-stress-test.js diff --git a/src/stream-muxer/spawner.js b/src/stream-muxer/tests/spawner.js similarity index 100% rename from src/stream-muxer/spawner.js rename to src/stream-muxer/tests/spawner.js diff --git a/src/stream-muxer/stress-test.js b/src/stream-muxer/tests/stress-test.js similarity index 100% rename from src/stream-muxer/stress-test.js rename to src/stream-muxer/tests/stress-test.js From 212e571624c68c5a6eadc47dcc48dba893ee4cdd Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 14:39:43 +0200 Subject: [PATCH 335/337] chore: clean up transport --- package.json | 10 +- src/transport/.gitignore | 8 -- src/transport/.npmignore | 34 ----- src/transport/.travis.yml | 10 -- src/transport/CHANGELOG.md | 171 ----------------------- src/transport/LICENSE | 22 --- src/transport/package.json | 65 --------- src/transport/test/transport.spec.js | 1 - src/transport/{ => tests}/dial-test.js | 0 src/transport/{ => tests}/filter-test.js | 0 src/transport/{ => tests}/index.js | 0 src/transport/{ => tests}/listen-test.js | 0 src/transport/{ => tests}/utils/index.js | 0 13 files changed, 9 insertions(+), 312 deletions(-) delete mode 100644 src/transport/.gitignore delete mode 100644 src/transport/.npmignore delete mode 100644 src/transport/.travis.yml delete mode 100644 src/transport/CHANGELOG.md delete mode 100644 src/transport/LICENSE delete mode 100644 src/transport/package.json delete mode 100644 src/transport/test/transport.spec.js rename src/transport/{ => tests}/dial-test.js (100%) rename src/transport/{ => tests}/filter-test.js (100%) rename src/transport/{ => tests}/index.js (100%) rename src/transport/{ => tests}/listen-test.js (100%) rename src/transport/{ => tests}/utils/index.js (100%) diff --git a/package.json b/package.json index bdb70ee..9531d9a 100644 --- a/package.json +++ b/package.json @@ -32,14 +32,22 @@ }, "homepage": "https://github.com/libp2p/js-interfaces#readme", "dependencies": { + "abort-controller": "^3.0.0", "abortable-iterator": "^2.1.0", + "async-iterator-to-pull-stream": "^1.3.0", "chai": "^4.2.0", + "chai-checkmark": "^1.0.1", "class-is": "^1.1.0", + "detect-node": "^2.0.4", "dirty-chai": "^2.0.1", "err-code": "^2.0.0", + "it-goodbye": "^2.0.1", + "libp2p-tcp": "^0.14.1", "multiaddr": "^7.1.0", + "p-limit": "^2.2.1", "peer-id": "^0.13.3", - "sinon": "^7.5.0" + "sinon": "^7.5.0", + "streaming-iterables": "^4.1.0" }, "devDependencies": { "aegir": "^20.4.1", diff --git a/src/transport/.gitignore b/src/transport/.gitignore deleted file mode 100644 index fd34c26..0000000 --- a/src/transport/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -**/node_modules/ -**/*.log -package-lock.json - -# Coverage directory used by tools like istanbul -coverage -docs -dist diff --git a/src/transport/.npmignore b/src/transport/.npmignore deleted file mode 100644 index 59335fd..0000000 --- a/src/transport/.npmignore +++ /dev/null @@ -1,34 +0,0 @@ -**/node_modules/ -**/*.log -test/repo-tests* - -# Logs -logs -*.log - -coverage - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -build - -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git -node_modules - -test diff --git a/src/transport/.travis.yml b/src/transport/.travis.yml deleted file mode 100644 index 89d4354..0000000 --- a/src/transport/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -sudo: false -language: node_js -node_js: - - "10" - -before_install: - - npm install -g npm - -script: - - npm run lint diff --git a/src/transport/CHANGELOG.md b/src/transport/CHANGELOG.md deleted file mode 100644 index ec01b39..0000000 --- a/src/transport/CHANGELOG.md +++ /dev/null @@ -1,171 +0,0 @@ - -# [0.7.0](https://github.com/libp2p/interface-transport/compare/v0.6.1...v0.7.0) (2019-09-19) - - -### Features - -* timeline and close checking ([#55](https://github.com/libp2p/interface-transport/issues/55)) ([993ca1c](https://github.com/libp2p/interface-transport/commit/993ca1c)) - - - - -## [0.6.1](https://github.com/libp2p/interface-transport/compare/v0.6.0...v0.6.1) (2019-09-16) - - -### Bug Fixes - -* **test:** close with timeout ([#54](https://github.com/libp2p/interface-transport/issues/54)) ([583f02d](https://github.com/libp2p/interface-transport/commit/583f02d)) - - - - -# [0.6.0](https://github.com/libp2p/interface-transport/compare/v0.5.2...v0.6.0) (2019-09-06) - - -### Features - -* add upgrader support to transports ([#53](https://github.com/libp2p/interface-transport/issues/53)) ([a5ad120](https://github.com/libp2p/interface-transport/commit/a5ad120)) - - -### BREAKING CHANGES - -* Transports must now be passed and use an `Upgrader` instance. See the Readme for usage. Compliance test suites will now need to pass `options` from `common.setup(options)` to their Transport constructor. - -* docs: update readme to include upgrader - -* docs: update readme to include MultiaddrConnection ref - -* feat: add upgrader spy to test suite - -* test: validate returned value of spy - - - - -## [0.5.2](https://github.com/libp2p/interface-transport/compare/v0.5.1...v0.5.2) (2019-06-11) - - - - -## [0.5.1](https://github.com/libp2p/interface-transport/compare/v0.5.0...v0.5.1) (2019-05-01) - - -### Bug Fixes - -* move dirty-chai to dependencies ([#52](https://github.com/libp2p/interface-transport/issues/52)) ([f9a7908](https://github.com/libp2p/interface-transport/commit/f9a7908)) - - - - -# [0.5.0](https://github.com/libp2p/interface-transport/compare/v0.4.0...v0.5.0) (2019-04-29) - - -### Reverts - -* "feat: make listen take an array of addrs ([#46](https://github.com/libp2p/interface-transport/issues/46))" ([#51](https://github.com/libp2p/interface-transport/issues/51)) ([030195e](https://github.com/libp2p/interface-transport/commit/030195e)) - - - - -# [0.4.0](https://github.com/libp2p/interface-transport/compare/v0.3.7...v0.4.0) (2019-04-19) - - -### Features - -* add type to AbortError ([#45](https://github.com/libp2p/interface-transport/issues/45)) ([4fd37bb](https://github.com/libp2p/interface-transport/commit/4fd37bb)) -* callbacks -> async / await ([#44](https://github.com/libp2p/interface-transport/issues/44)) ([b30ee5f](https://github.com/libp2p/interface-transport/commit/b30ee5f)) -* make listen take an array of addrs ([#46](https://github.com/libp2p/interface-transport/issues/46)) ([1dc5baa](https://github.com/libp2p/interface-transport/commit/1dc5baa)) - - -### BREAKING CHANGES - -* All places in the API that used callbacks are now replaced with async/await - -* test: add tests for canceling dials - -* feat: Adapter class - - - - -## [0.3.7](https://github.com/libp2p/interface-transport/compare/v0.3.6...v0.3.7) (2018-11-29) - - - - -## [0.3.6](https://github.com/libp2p/interface-transport/compare/v0.3.5...v0.3.6) (2018-04-05) - - - - -## [0.3.5](https://github.com/libp2p/interface-transport/compare/v0.3.4...v0.3.5) (2017-03-21) - - -### Bug Fixes - -* wrong main path in package.json ([54b83a7](https://github.com/libp2p/interface-transport/commit/54b83a7)) - - - - -## [0.3.4](https://github.com/libp2p/interface-transport/compare/v0.3.3...v0.3.4) (2017-02-09) - - - - -## [0.3.3](https://github.com/libp2p/interface-transport/compare/v0.3.2...v0.3.3) (2016-09-06) - - - - -## [0.3.2](https://github.com/libp2p/interface-transport/compare/v0.3.1...v0.3.2) (2016-09-06) - - -### Bug Fixes - -* **dial-test:** ensure goodbye works over tcp ([e1346da](https://github.com/libp2p/interface-transport/commit/e1346da)) - - - - -## [0.3.1](https://github.com/libp2p/interface-transport/compare/v0.3.0...v0.3.1) (2016-09-05) - - -### Bug Fixes - -* **package.json:** point to right main ([ace6150](https://github.com/libp2p/interface-transport/commit/ace6150)) - - - - -# [0.3.0](https://github.com/libp2p/interface-transport/compare/v0.2.0...v0.3.0) (2016-09-05) - - -### Bug Fixes - -* **tests:** add place holder test script for releases ([8e9f7cf](https://github.com/libp2p/interface-transport/commit/8e9f7cf)) - - -### Features - -* **dialer:** remove conn from on connect callback ([1bd20d9](https://github.com/libp2p/interface-transport/commit/1bd20d9)) -* **spec:** update the dial interface to cope with new pull additions ([2e12166](https://github.com/libp2p/interface-transport/commit/2e12166)) -* **tests:** add dial and listen tests ([d50224d](https://github.com/libp2p/interface-transport/commit/d50224d)) - - - - -# [0.2.0](https://github.com/libp2p/interface-transport/compare/v0.1.1...v0.2.0) (2016-06-16) - - - - -## [0.1.1](https://github.com/libp2p/interface-transport/compare/v0.1.0...v0.1.1) (2015-12-12) - - - - -# 0.1.0 (2015-09-17) - - - diff --git a/src/transport/LICENSE b/src/transport/LICENSE deleted file mode 100644 index 59a33ba..0000000 --- a/src/transport/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 David Dias - -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/src/transport/package.json b/src/transport/package.json deleted file mode 100644 index fc4779c..0000000 --- a/src/transport/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "interface-transport", - "version": "0.7.0", - "description": "A test suite and interface you can use to implement a transport.", - "leadMaintainer": "Jacob Heun ", - "repository": { - "type": "git", - "url": "https://github.com/libp2p/interface-transport.git" - }, - "main": "src/index.js", - "files": [ - "dist", - "src" - ], - "scripts": { - "lint": "aegir lint", - "test": "aegir test", - "build": "aegir build", - "release": "aegir release --no-test", - "release-minor": "aegir release --type minor --no-test", - "release-major": "aegir release --type major --no-test", - "coverage": "exit(0)", - "coverage-publish": "exit(0)" - }, - "pre-push": [ - "lint" - ], - "keywords": [ - "IPFS" - ], - "license": "MIT", - "bugs": { - "url": "https://github.com/libp2p/interface-transport/issues" - }, - "homepage": "https://github.com/libp2p/interface-transport", - "devDependencies": { - "aegir": "^20.0.0" - }, - "dependencies": { - "abort-controller": "^3.0.0", - "async-iterator-to-pull-stream": "^1.3.0", - "chai": "^4.2.0", - "dirty-chai": "^2.0.1", - "interface-connection": "~0.3.3", - "it-goodbye": "^2.0.0", - "it-pipe": "^1.0.0", - "multiaddr": "^7.0.0", - "pull-stream": "^3.6.9", - "sinon": "^7.4.2", - "streaming-iterables": "^4.1.0" - }, - "contributors": [ - "Alan Shaw ", - "David Dias ", - "Friedel Ziegelmayer ", - "Jacob Heun ", - "João Santos ", - "Maciej Krüger ", - "Richard Littauer ", - "Vasco Santos ", - "dirkmc ", - "dmitriy ryajov ", - "greenkeeperio-bot " - ] -} diff --git a/src/transport/test/transport.spec.js b/src/transport/test/transport.spec.js deleted file mode 100644 index ccacec3..0000000 --- a/src/transport/test/transport.spec.js +++ /dev/null @@ -1 +0,0 @@ -'use strict' diff --git a/src/transport/dial-test.js b/src/transport/tests/dial-test.js similarity index 100% rename from src/transport/dial-test.js rename to src/transport/tests/dial-test.js diff --git a/src/transport/filter-test.js b/src/transport/tests/filter-test.js similarity index 100% rename from src/transport/filter-test.js rename to src/transport/tests/filter-test.js diff --git a/src/transport/index.js b/src/transport/tests/index.js similarity index 100% rename from src/transport/index.js rename to src/transport/tests/index.js diff --git a/src/transport/listen-test.js b/src/transport/tests/listen-test.js similarity index 100% rename from src/transport/listen-test.js rename to src/transport/tests/listen-test.js diff --git a/src/transport/utils/index.js b/src/transport/tests/utils/index.js similarity index 100% rename from src/transport/utils/index.js rename to src/transport/tests/utils/index.js From 13844d482cfb379f160f3a5848202c70b7fff26d Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 14:40:12 +0200 Subject: [PATCH 336/337] chore: clean up transport --- src/transport/tests/dial-test.js | 2 +- src/transport/tests/index.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/transport/tests/dial-test.js b/src/transport/tests/dial-test.js index d6f919c..0e19cf4 100644 --- a/src/transport/tests/dial-test.js +++ b/src/transport/tests/dial-test.js @@ -11,7 +11,7 @@ const goodbye = require('it-goodbye') const { collect } = require('streaming-iterables') const pipe = require('it-pipe') const AbortController = require('abort-controller') -const AbortError = require('./errors').AbortError +const AbortError = require('../errors').AbortError const sinon = require('sinon') module.exports = (common) => { diff --git a/src/transport/tests/index.js b/src/transport/tests/index.js index ba9ee98..1c3e096 100644 --- a/src/transport/tests/index.js +++ b/src/transport/tests/index.js @@ -13,5 +13,5 @@ module.exports = (common) => { }) } -module.exports.AbortError = require('./errors').AbortError -module.exports.Adapter = require('./adapter') +module.exports.AbortError = require('../errors').AbortError +module.exports.Adapter = require('../adapter') From 3230ae4eadc5b786e2f7daa85e42afa0c98fdbe6 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Fri, 18 Oct 2019 14:45:28 +0200 Subject: [PATCH 337/337] chore: fix transport docs and imports --- src/transport/README.md | 20 ++------- src/transport/adapter.js | 80 ------------------------------------ src/transport/tests/index.js | 3 -- 3 files changed, 4 insertions(+), 99 deletions(-) delete mode 100644 src/transport/adapter.js diff --git a/src/transport/README.md b/src/transport/README.md index 5c7fe49..f799734 100644 --- a/src/transport/README.md +++ b/src/transport/README.md @@ -1,14 +1,6 @@ interface-transport =================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) -[![](https://img.shields.io/travis/libp2p/interface-transport.svg?style=flat-square)](https://travis-ci.com/libp2p/interface-transport) -[![Dependency Status](https://david-dm.org/libp2p/interface-transport.svg?style=flat-square)](https://david-dm.org/libp2p/interface-transport) -[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) - > A test suite and interface you can use to implement a libp2p transport. A libp2p transport is understood as something that offers a dial and listen interface. The primary goal of this module is to enable developers to pick and swap their transport module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by abstract-blob-store, interface-stream-muxer and others. @@ -17,10 +9,6 @@ Publishing a test suite as a module lets multiple modules all ensure compatibili The purpose of this interface is not to reinvent any wheels when it comes to dialing and listening to transports. Instead, it tries to provide a uniform API for several transports through a shimmed interface. -## Lead Maintainer - -[Jacob Heun](https://github.com/jacobheun/) - # Modules that implement the interface - [js-libp2p-tcp](https://github.com/libp2p/js-libp2p-tcp) @@ -45,7 +33,7 @@ Include this badge in your readme if you make a module that is compatible with t /* eslint-env mocha */ 'use strict' -const tests = require('interface-transport') +const tests = require('libp2p-interfaces/src/transport/tests') const multiaddr = require('multiaddr') const YourTransport = require('../src') @@ -147,7 +135,7 @@ This method uses a transport to dial a Peer listening on `multiaddr`. `[options]` the options that may be passed to the dial. Must support the `signal` option (see below) -Dial **MUST** call and return `upgrader.upgradeOutbound(multiaddrConnection)`. The upgrader will return an [interface-connection](https://github.com/libp2p/interface-connection) instance. +Dial **MUST** call and return `upgrader.upgradeOutbound(multiaddrConnection)`. The upgrader will return an [interface-connection](../connection) instance. The dial may throw an `Error` instance if there was a problem connecting to the `multiaddr`. @@ -157,7 +145,7 @@ Dials may be cancelled using an `AbortController`: ```Javascript const AbortController = require('abort-controller') -const { AbortError } = require('interface-transport') +const { AbortError } = require('libp2p-interfaces/src/transport/errors') const controller = new AbortController() try { const conn = await mytransport.dial(ma, { signal: controller.signal }) @@ -193,7 +181,7 @@ This method creates a listener on the transport. Implementations **MUST** call ` `options` is an optional object that contains the properties the listener must have, in order to properly listen on a given transport/socket. -`handlerFunction` is a function called each time a new connection is received. It must follow the following signature: `function (conn) {}`, where `conn` is a connection that follows the [`interface-connection`](https://github.com/diasdavid/interface-connection). +`handlerFunction` is a function called each time a new connection is received. It must follow the following signature: `function (conn) {}`, where `conn` is a connection that follows the [`interface-connection`](../connection). The listener object created may emit the following events: diff --git a/src/transport/adapter.js b/src/transport/adapter.js deleted file mode 100644 index e7c87db..0000000 --- a/src/transport/adapter.js +++ /dev/null @@ -1,80 +0,0 @@ -'use strict' - -const { Connection } = require('interface-connection') -const toPull = require('async-iterator-to-pull-stream') -const error = require('pull-stream/sources/error') -const drain = require('pull-stream/sinks/drain') -const noop = () => {} - -function callbackify (fn) { - return async function (...args) { - let cb = args.pop() - if (typeof cb !== 'function') { - args.push(cb) - cb = noop - } - let res - try { - res = await fn(...args) - } catch (err) { - return cb(err) - } - cb(null, res) - } -} - -// Legacy adapter to old transport & connection interface -class Adapter { - constructor (transport) { - this.transport = transport - } - - dial (ma, options, callback) { - if (typeof options === 'function') { - callback = options - options = {} - } - - callback = callback || noop - - const conn = new Connection() - - this.transport.dial(ma, options) - .then(socket => { - conn.setInnerConn(toPull.duplex(socket)) - conn.getObservedAddrs = callbackify(socket.getObservedAddrs.bind(socket)) - conn.close = callbackify(socket.close.bind(socket)) - callback(null, conn) - }) - .catch(err => { - conn.setInnerConn({ sink: drain(), source: error(err) }) - callback(err) - }) - - return conn - } - - createListener (options, handler) { - if (typeof options === 'function') { - handler = options - options = {} - } - - const server = this.transport.createListener(options, socket => { - const conn = new Connection(toPull.duplex(socket)) - conn.getObservedAddrs = callbackify(socket.getObservedAddrs.bind(socket)) - handler(conn) - }) - - const proxy = { - listen: callbackify(server.listen.bind(server)), - close: callbackify(server.close.bind(server)), - getAddrs: callbackify(server.getAddrs.bind(server)), - getObservedAddrs: callbackify(() => server.getObservedAddrs()) - } - - return new Proxy(server, { get: (_, prop) => proxy[prop] || server[prop] }) - } -} - -module.exports = Adapter diff --git a/src/transport/tests/index.js b/src/transport/tests/index.js index 1c3e096..0d43233 100644 --- a/src/transport/tests/index.js +++ b/src/transport/tests/index.js @@ -12,6 +12,3 @@ module.exports = (common) => { filter(common) }) } - -module.exports.AbortError = require('../errors').AbortError -module.exports.Adapter = require('../adapter')

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�rEB5(lD;hZ!LYbm@=c9-j)Z2O5=eVYvZNpIQ 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 Ar2qf` literal 0 HcmV?d00001 diff --git a/img/badge.svg b/img/badge.svg new file mode 100644 index 0000000..f3c41b0 --- /dev/null +++ b/img/badge.svg @@ -0,0 +1,19 @@ + + + + badge + Created with Sketch. + + + + + Peer Routin + g + + + Compatibl + e + + + + \ No newline at end of file From f15b452d344b5d44bdd5818d39364fe8f170a452 Mon Sep 17 00:00:00 2001 From: David Dias Date: Sat, 19 Sep 2015 16:46:52 +0100 Subject: [PATCH 055/337] add README --- README.md | 63 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 22 ++++++++++++++++ tests/base-test.js | 8 ++++++ tests/index.js | 6 +++++ 4 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 package.json create mode 100644 tests/base-test.js create mode 100644 tests/index.js diff --git a/README.md b/README.md index 25518e9..b58e9c3 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,61 @@ -# abstract-peer-routing -A test suite and interface you can use to implement a Peer Routing for libp2p. +abstract-peer-routing +===================== + +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) + +> A test suite and interface you can use to implement a Peer Routing module for libp2p. + +The primary goal of this module is to enable developers to pick and swap their Peer Routing module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by abstract-blob-store and abstract-stream-muxer. + +Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. + +The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. + +# Modules that implement the interface + +- https://github.com/diasdavid/node-ipfs-kad-router + +# Badge + +Include this badge in your readme if you make a module that is compatible with the abstract-record-store API. You can validate this by running the tests. + +![](https://raw.githubusercontent.com/diasdavid/abstract-peer-routing/master/img/badge.png) + +# How to use the battery of tests + +## Node.js + +``` +var tape = require('tape') +var tests = require('abstract-record-store/tests') +var YourPeerRouter = require('../src') + +var common = { + setup: function (t, cb) { + cb(null, YourPeerRouter) + }, + teardown: function (t, cb) { + cb() + } +} + +tests(tape, common) +``` + +## Go + +> WIP + +# API + +A valid (read: that follows this abstraction) stream muxer, must implement the following API. + +### Find peers 'responsible' or 'closest' to a given key + +- `Node.js` peerRouting.findPeers(key, function (err, peersPriorityQueue) {}) + +In a peer to peer context, the concept of 'responsability' or 'closeness' for a given key translates to having a way to find deterministically or that at least there is a significant overlap between searches, the same group of peers when searching for the same given key. + +This method will query the network (route it) and return a Priority Queue datastructe with a list of PeerInfo objects, ordered by 'closeness'. + +key is a multihash diff --git a/package.json b/package.json new file mode 100644 index 0000000..815de9f --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "abstract-peer-routing", + "version": "0.0.0", + "description": "A test suite and interface you can use to implement a Peer Routing for libp2p.", + "repository": { + "type": "git", + "url": "https://github.com/diasdavid/abstract-peer-routing.git" + }, + "keywords": [ + "IPFS" + ], + "author": "David Dias ", + "license": "MIT", + "bugs": { + "url": "https://github.com/diasdavid/abstract-peer-routing/issues" + }, + "homepage": "https://github.com/diasdavid/abstract-peer-routing", + "devDependencies": {}, + "dependencies": { + "timed-tape": "^0.1.0" + } +} diff --git a/tests/base-test.js b/tests/base-test.js new file mode 100644 index 0000000..7f40743 --- /dev/null +++ b/tests/base-test.js @@ -0,0 +1,8 @@ +module.exports.all = function (test, common) { + test('a test', function (t) { + common.setup(test, function (err, pr) { + t.plan(1) + t.ifError(err) + }) + }) +} diff --git a/tests/index.js b/tests/index.js new file mode 100644 index 0000000..b232406 --- /dev/null +++ b/tests/index.js @@ -0,0 +1,6 @@ +var timed = require('timed-tape') + +module.exports = function (test, common) { + test = timed(test) + require('./base-test.js').all(test, common) +} From 471f2ad758b60be4643ba6117f735e27f6d606b0 Mon Sep 17 00:00:00 2001 From: David Dias Date: Sat, 19 Sep 2015 17:42:28 +0100 Subject: [PATCH 056/337] release --- README.md | 2 +- package.json | 1 + tests/base-test.js | 11 +++++++++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b58e9c3..8c922a1 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Include this badge in your readme if you make a module that is compatible with t ``` var tape = require('tape') -var tests = require('abstract-record-store/tests') +var tests = require('abstract-peer-routing/tests') var YourPeerRouter = require('../src') var common = { diff --git a/package.json b/package.json index 815de9f..2783eac 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "homepage": "https://github.com/diasdavid/abstract-peer-routing", "devDependencies": {}, "dependencies": { + "peer-id": "^0.3.3", "timed-tape": "^0.1.0" } } diff --git a/tests/base-test.js b/tests/base-test.js index 7f40743..fbdbf49 100644 --- a/tests/base-test.js +++ b/tests/base-test.js @@ -1,8 +1,15 @@ +var Id = require('peer-id') + module.exports.all = function (test, common) { - test('a test', function (t) { + test('Simple findPeers test', function (t) { common.setup(test, function (err, pr) { - t.plan(1) + t.plan(3) t.ifError(err) + pr.findPeers(Id.create().toBytes(), function (err, peerQueue) { + t.ifError(err) + t.equal(peerQueue.length >= 1, true) + // common.teardown() + }) }) }) } From fa3f6f443e44ec7879a7f93812e94c49b1fec2ed Mon Sep 17 00:00:00 2001 From: David Dias Date: Sat, 19 Sep 2015 17:42:39 +0100 Subject: [PATCH 057/337] Release v0.1.0. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2783eac..5978e0a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abstract-peer-routing", - "version": "0.0.0", + "version": "0.1.0", "description": "A test suite and interface you can use to implement a Peer Routing for libp2p.", "repository": { "type": "git", From a170607acba8dfbcff36901c406408f22f653b46 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 25 Sep 2015 12:26:19 +0100 Subject: [PATCH 058/337] add teardown --- tests/base-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/base-test.js b/tests/base-test.js index fbdbf49..3768f1d 100644 --- a/tests/base-test.js +++ b/tests/base-test.js @@ -8,7 +8,7 @@ module.exports.all = function (test, common) { pr.findPeers(Id.create().toBytes(), function (err, peerQueue) { t.ifError(err) t.equal(peerQueue.length >= 1, true) - // common.teardown() + common.teardown() }) }) }) From 9b2678f7d22c4d5d25d23d6980536aab22504245 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 25 Sep 2015 12:26:28 +0100 Subject: [PATCH 059/337] Release v0.1.1. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5978e0a..cd88cdf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abstract-peer-routing", - "version": "0.1.0", + "version": "0.1.1", "description": "A test suite and interface you can use to implement a Peer Routing for libp2p.", "repository": { "type": "git", From 4b8ca19b1030cd15c56ee179e8dc32dec0255bdd Mon Sep 17 00:00:00 2001 From: Pau Ramon Revilla Date: Fri, 30 Oct 2015 09:06:04 +0100 Subject: [PATCH 060/337] Added missing dependency --- package.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b949b7a..ababa2f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abstract-connection", - "version": "0.0.1", + "version": "0.0.2", "description": "A test suite and interface you can use to implement a connection interface.", "repository": { "type": "git", @@ -14,5 +14,8 @@ "bugs": { "url": "https://github.com/diasdavid/abstract-connection/issues" }, - "homepage": "https://github.com/diasdavid/abstract-connection" + "homepage": "https://github.com/diasdavid/abstract-connection", + "dependencies": { + "timed-tape": "^0.1.0" + } } From ec2446f95152c6cbd5f4387cdc0f5fd9c75b2caf Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 11 Dec 2015 20:23:03 -0800 Subject: [PATCH 061/337] update name --- README.md | 10 +++++----- package.json | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 8c922a1..5081bef 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ -abstract-peer-routing +interface-peer-routing ===================== [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) > A test suite and interface you can use to implement a Peer Routing module for libp2p. -The primary goal of this module is to enable developers to pick and swap their Peer Routing module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by abstract-blob-store and abstract-stream-muxer. +The primary goal of this module is to enable developers to pick and swap their Peer Routing module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by abstract-blob-store and interface-stream-muxer. Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. @@ -17,9 +17,9 @@ The API is presented with both Node.js and Go primitives, however, there is not # Badge -Include this badge in your readme if you make a module that is compatible with the abstract-record-store API. You can validate this by running the tests. +Include this badge in your readme if you make a module that is compatible with the interface-record-store API. You can validate this by running the tests. -![](https://raw.githubusercontent.com/diasdavid/abstract-peer-routing/master/img/badge.png) +![](https://raw.githubusercontent.com/diasdavid/interface-peer-routing/master/img/badge.png) # How to use the battery of tests @@ -27,7 +27,7 @@ Include this badge in your readme if you make a module that is compatible with t ``` var tape = require('tape') -var tests = require('abstract-peer-routing/tests') +var tests = require('interface-peer-routing/tests') var YourPeerRouter = require('../src') var common = { diff --git a/package.json b/package.json index cd88cdf..1bd4616 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { - "name": "abstract-peer-routing", + "name": "interface-peer-routing", "version": "0.1.1", "description": "A test suite and interface you can use to implement a Peer Routing for libp2p.", "repository": { "type": "git", - "url": "https://github.com/diasdavid/abstract-peer-routing.git" + "url": "https://github.com/diasdavid/interface-peer-routing.git" }, "keywords": [ "IPFS" @@ -12,9 +12,9 @@ "author": "David Dias ", "license": "MIT", "bugs": { - "url": "https://github.com/diasdavid/abstract-peer-routing/issues" + "url": "https://github.com/diasdavid/interface-peer-routing/issues" }, - "homepage": "https://github.com/diasdavid/abstract-peer-routing", + "homepage": "https://github.com/diasdavid/interface-peer-routing", "devDependencies": {}, "dependencies": { "peer-id": "^0.3.3", From 922d7c52700f030a7637e3022fc085af1fdfaf76 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 11 Dec 2015 20:23:17 -0800 Subject: [PATCH 062/337] Release v0.1.2. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1bd4616..27ca212 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-peer-routing", - "version": "0.1.1", + "version": "0.1.2", "description": "A test suite and interface you can use to implement a Peer Routing for libp2p.", "repository": { "type": "git", From 00ee073792b053a8944381285f05879d8b2c2ca2 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 11 Dec 2015 20:23:31 -0800 Subject: [PATCH 063/337] Release v0.1.3. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 27ca212..9ce81db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-peer-routing", - "version": "0.1.2", + "version": "0.1.3", "description": "A test suite and interface you can use to implement a Peer Routing for libp2p.", "repository": { "type": "git", From 894bb69f18015c48c46de0d8b7c3e7769b09f04a Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 11 Dec 2015 20:27:55 -0800 Subject: [PATCH 064/337] update name --- README.md | 14 +++++++------- package.json | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 6edefc5..6c27305 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ -abstract-record-store +interface-record-store ===================== [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) > A test suite and interface you can use to implement a a IPRS compliant(https://github.com/ipfs/specs/tree/master/records) Record Store. -The primary goal of this module is to enable developers to pick and swap their Record Store module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by [`abstract-blob-store`](https://github.com/maxogden/abstract-blob-store) and [`abstract-stream-muxer`](https://github.com/diasdavid/abstract-stream-muxer). +The primary goal of this module is to enable developers to pick and swap their Record Store module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by [`abstract-blob-store`](https://github.com/maxogden/abstract-blob-store) and [`interface-stream-muxer`](https://github.com/diasdavid/interface-stream-muxer). Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. @@ -18,9 +18,9 @@ The API is presented with both Node.js and Go primitives, however, there is not # Badge -Include this badge in your readme if you make a module that is compatible with the abstract-record-store API. You can validate this by running the tests. +Include this badge in your readme if you make a module that is compatible with the interface-record-store API. You can validate this by running the tests. -![](https://raw.githubusercontent.com/diasdavid/abstract-record-store/master/img/badge.png) +![](https://raw.githubusercontent.com/diasdavid/interface-record-store/master/img/badge.png) # How to use the battery of tests @@ -28,7 +28,7 @@ Include this badge in your readme if you make a module that is compatible with t ``` var tape = require('tape') -var tests = require('abstract-record-store/tests') +var tests = require('interface-record-store/tests') var YourRecordStore = require('../src') var common = { @@ -74,7 +74,7 @@ if `err` is passed, means that the record wasn't stored properly or it was unval - the key is a multihash but not necessarily the hash of the record signature object. - a DRS instance must have a mapping of key->[hash(recordSignature)] to know which records belong to a given key (provided value) -- DRS implements the abstract-record-store interface -- DRS may levarage other implementations of abstract-record-store to find records in the network or other storage mechanisms +- DRS implements the interface-record-store interface +- DRS may levarage other implementations of interface-record-store to find records in the network or other storage mechanisms - DRS should return every valid record it can find in a query - all unvalid records detected in the process should be discarded/deleted diff --git a/package.json b/package.json index 3e3df62..1d8aba7 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "abstract-record-store", + "name": "interface-record-store", "version": "0.1.1", "description": "A test suite and interface you can use to implement a a IPRS compliant(https://github.com/ipfs/specs/tree/master/records) Record Store", "scripts": { @@ -7,7 +7,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/diasdavid/abstract-record-store.git" + "url": "https://github.com/diasdavid/interface-record-store.git" }, "keywords": [ "IPFS" @@ -18,9 +18,9 @@ "author": "David Dias ", "license": "MIT", "bugs": { - "url": "https://github.com/diasdavid/abstract-record-store/issues" + "url": "https://github.com/diasdavid/interface-record-store/issues" }, - "homepage": "https://github.com/diasdavid/abstract-record-store", + "homepage": "https://github.com/diasdavid/interface-record-store", "dependencies": { "ecdsa": "^0.6.0", "ipld": "^0.2.0", From 00af5695fb1fba37c57173b2984a61e4cf336251 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 11 Dec 2015 20:28:06 -0800 Subject: [PATCH 065/337] Release v0.1.2. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1d8aba7..d8eb994 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-record-store", - "version": "0.1.1", + "version": "0.1.2", "description": "A test suite and interface you can use to implement a a IPRS compliant(https://github.com/ipfs/specs/tree/master/records) Record Store", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" From 2af97d4e79b1f20435ab364a819b48906883b85a Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 11 Dec 2015 20:38:40 -0800 Subject: [PATCH 066/337] update name --- README.md | 10 +++++----- package.json | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index a35cbe4..e885054 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -abstract-connection +interface-connection ================== [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) -> A test suite and interface you can use to implement a connection. A connection is understood as something that offers mechanism for writing and reading data, back pressure, half and full duplex streams. This module and test suite were heavily inspired by abstract-blob-store and abstract-stream-muxer. +> A test suite and interface you can use to implement a connection. A connection is understood as something that offers mechanism for writing and reading data, back pressure, half and full duplex streams. This module and test suite were heavily inspired by abstract-blob-store and interface-stream-muxer. The primary goal of module is to enable developers to pick, swap or upgrade their connection without loosing the same API expectations and mechanisms such as back pressure and the hability to half close a connection. @@ -20,9 +20,9 @@ The API is presented with both Node.js and Go primitives, however, there is not # Badge -Include this badge in your readme if you make a module that is compatible with the abstract-connection API. You can validate this by running the tests. +Include this badge in your readme if you make a module that is compatible with the interface-connection API. You can validate this by running the tests. -![](https://raw.githubusercontent.com/diasdavid/abstract-connection/master/img/badge.png) +![](https://raw.githubusercontent.com/diasdavid/interface-connection/master/img/badge.png) # How to use the battery of tests @@ -30,7 +30,7 @@ Include this badge in your readme if you make a module that is compatible with t ``` var tape = require('tape') -var tests = require('abstract-connection/tests') +var tests = require('interface-connection/tests') var YourConnectionHandler = require('../src') var common = { diff --git a/package.json b/package.json index ababa2f..350f9ab 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { - "name": "abstract-connection", + "name": "interface-connection", "version": "0.0.2", "description": "A test suite and interface you can use to implement a connection interface.", "repository": { "type": "git", - "url": "https://github.com/diasdavid/abstract-connection.git" + "url": "https://github.com/diasdavid/interface-connection.git" }, "keywords": [ "IPFS" @@ -12,9 +12,9 @@ "author": "David Dias ", "license": "MIT", "bugs": { - "url": "https://github.com/diasdavid/abstract-connection/issues" + "url": "https://github.com/diasdavid/interface-connection/issues" }, - "homepage": "https://github.com/diasdavid/abstract-connection", + "homepage": "https://github.com/diasdavid/interface-connection", "dependencies": { "timed-tape": "^0.1.0" } From 0f710752d976853e44449df758b4ff7b8d19541f Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 11 Dec 2015 20:38:44 -0800 Subject: [PATCH 067/337] Release v0.0.3. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 350f9ab..8ce1c49 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.0.2", + "version": "0.0.3", "description": "A test suite and interface you can use to implement a connection interface.", "repository": { "type": "git", From c121fd83fac0f7757bbee228301b297f5a69d8a7 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 11 Dec 2015 20:44:47 -0800 Subject: [PATCH 068/337] update name --- README.md | 16 ++++++++-------- package.json | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index ec31bef..1ba1fb5 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ -abstract-transport +interface-transport =================== [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) > A test suite and interface you can use to implement a transport. A transport is understood as something that offers a dial+listen interface -The primary goal of this module is to enable developers to pick and swap their Record Store module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by abstract-blob-store and abstract-stream-muxer. +The primary goal of this module is to enable developers to pick and swap their Record Store module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by abstract-blob-store and interface-stream-muxer. Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. -The purpose of this abstraction is not to reinvent any wheels when it comes to dialing and listening to transports, instead, it tries to uniform several transports through a shimmed interface. +The purpose of this interfaceion is not to reinvent any wheels when it comes to dialing and listening to transports, instead, it tries to uniform several transports through a shimmed interface. The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. @@ -21,9 +21,9 @@ note: for any new given implementation that adds one more option to the multiadd # Badge -Include this badge in your readme if you make a module that is compatible with the abstract-transport API. You can validate this by running the tests. +Include this badge in your readme if you make a module that is compatible with the interface-transport API. You can validate this by running the tests. -![](https://raw.githubusercontent.com/diasdavid/abstract-transport/master/img/badge.png) +![](https://raw.githubusercontent.com/diasdavid/interface-transport/master/img/badge.png) # How to use the battery of tests @@ -31,7 +31,7 @@ Include this badge in your readme if you make a module that is compatible with t ``` var tape = require('tape') -var tests = require('abstract-transport/tests') +var tests = require('interface-transport/tests') var YourTransportHandler = require('../src') var common = { @@ -62,7 +62,7 @@ This method dials a transport to the Peer referenced by the peerInfo object. multiaddr must be of the type [`multiaddr`](http://npmjs.org/multiaddr). -`stream` must implements the [abstract-connection](https://github.com/diasdavid/abstract-connection) interface. +`stream` must implements the [interface-connection](https://github.com/diasdavid/interface-connection) interface. `[options]` are not mandatory fields for all the implementations that might be passed for certain implementations for them to work (e.g. a Signalling Server for a WebRTC transport implementation) @@ -72,7 +72,7 @@ multiaddr must be of the type [`multiaddr`](http://npmjs.org/multiaddr). This method waits and listens for incoming transports by other peers. -`stream` must be a stream that implements the [abstract-connection](https://github.com/diasdavid/abstract-connection) interface. +`stream` must be a stream that implements the [interface-connection](https://github.com/diasdavid/interface-connection) interface. Options are the properties this listener must have access in order to properly listen on a given transport/socket diff --git a/package.json b/package.json index e2c0cd8..f0a1e62 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { - "name": "abstract-transport", + "name": "interface-transport", "version": "0.1.0", "description": "A test suite and interface you can use to implement a transport.", "repository": { "type": "git", - "url": "https://github.com/diasdavid/abstract-transport.git" + "url": "https://github.com/diasdavid/interface-transport.git" }, "keywords": [ "IPFS" @@ -12,9 +12,9 @@ "author": "David Dias ", "license": "MIT", "bugs": { - "url": "https://github.com/diasdavid/abstract-transport/issues" + "url": "https://github.com/diasdavid/interface-transport/issues" }, - "homepage": "https://github.com/diasdavid/abstract-transport", + "homepage": "https://github.com/diasdavid/interface-transport", "devDependencies": {}, "dependencies": { "multiaddr": "^1.0.0", From 6848fa9819ba88763f58eae04f4dc2eb5b80549e Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 11 Dec 2015 20:45:01 -0800 Subject: [PATCH 069/337] Release v0.1.1. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f0a1e62..72989bb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.1.0", + "version": "0.1.1", "description": "A test suite and interface you can use to implement a transport.", "repository": { "type": "git", From e469f666c42f76f5d681e86bc80320d16c8ca4f2 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 11 Dec 2015 20:48:29 -0800 Subject: [PATCH 070/337] update name --- README.md | 12 ++++++------ package.json | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index fcd6980..c85fba1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -abstract-stream-muxer +interface-stream-muxer ===================== [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) @@ -21,7 +21,7 @@ Send a PR to add a new one if you happen to find or write one. # Badge -Include this badge in your readme if you make a new module that uses abstract-stream-muxer API. +Include this badge in your readme if you make a new module that uses interface-stream-muxer API. ![](/img/badge.png) @@ -29,11 +29,11 @@ Include this badge in your readme if you make a new module that uses abstract-st ## Node.js -Install abstract-stream-muxer as one of the dependencies of your project and as a test file, using `tap`, `tape` or a test runner with compatible API, do: +Install interface-stream-muxer as one of the dependencies of your project and as a test file, using `tap`, `tape` or a test runner with compatible API, do: ``` var tape = require('tape') -var tests = require('abstract-stream-muxer/tests') +var tests = require('interface-stream-muxer/tests') var YourStreamMuxer = require('../src') var common = { @@ -69,7 +69,7 @@ If `err` is passed, no operation should be made in `conn`. `isListener` is a bool that tells the side of the socket we are, `isListener = true` for listener/server and `isListener = false` for dialer/client side. -`conn` abstracts our established Connection with the other endpoint, it must offer an interface to open a stream inside this connection and to receive incomming stream requests. +`conn` interfaces our established Connection with the other endpoint, it must offer an interface to open a stream inside this connection and to receive incomming stream requests. ### Dial(open/create) a new stream @@ -81,7 +81,7 @@ This method negotiates and opens a new stream with the other endpoint. If `err` is passed, no operation should be made in `stream`. -`stream` abstract our established Stream with the other endpoint, it must implement the [Duplex Stream interface](https://nodejs.org/api/stream.html#stream_class_stream_duplex) in Node.js or the [ReadWriteCloser](http://golang.org/pkg/io/#ReadWriteCloser) in Go. +`stream` interface our established Stream with the other endpoint, it must implement the [Duplex Stream interface](https://nodejs.org/api/stream.html#stream_class_stream_duplex) in Node.js or the [ReadWriteCloser](http://golang.org/pkg/io/#ReadWriteCloser) in Go. In the Node.js case, if no callback is passed, stream will emit an 'ready' event when it is prepared or a 'error' event if it fails to establish the connection, until then, it will buffer the 'write' calls. diff --git a/package.json b/package.json index 9aadda3..39dd8d4 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "abstract-stream-muxer", + "name": "interface-stream-muxer", "version": "0.2.4", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", @@ -11,20 +11,20 @@ }, "repository": { "type": "git", - "url": "https://github.com/diasdavid/abstract-stream-muxer.git" + "url": "https://github.com/diasdavid/interface-stream-muxer.git" }, "keywords": [ "Streams", "Muxer", - "Abstract", + "interface", "Interface" ], "author": "David Dias ", "license": "MIT", "bugs": { - "url": "https://github.com/diasdavid/abstract-stream-muxer/issues" + "url": "https://github.com/diasdavid/interface-stream-muxer/issues" }, - "homepage": "https://github.com/diasdavid/abstract-stream-muxer", + "homepage": "https://github.com/diasdavid/interface-stream-muxer", "dependencies": { "stream-pair": "^1.0.3", "timed-tape": "^0.1.0" From 4093c5762be1427ce56bd52e853cdd9e29c1e70c Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 11 Dec 2015 20:48:35 -0800 Subject: [PATCH 071/337] Release v0.2.5. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 39dd8d4..e4ecbf0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.2.4", + "version": "0.2.5", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "directories": { From ca8635ca3935d7a99cc300219ce4a67a94f67f8e Mon Sep 17 00:00:00 2001 From: Sathya Narrayanan Date: Sat, 12 Dec 2015 11:19:02 +0530 Subject: [PATCH 072/337] Updates README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5081bef..37c935e 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Include this badge in your readme if you make a module that is compatible with t ## Node.js -``` +```javascript var tape = require('tape') var tests = require('interface-peer-routing/tests') var YourPeerRouter = require('../src') From 1aaff80f53464042ce8bc398bd8c26b94874d84d Mon Sep 17 00:00:00 2001 From: David Dias Date: Sun, 6 Mar 2016 22:42:53 +0000 Subject: [PATCH 073/337] done --- README.md | 29 +++++----- tests/.DS_Store | Bin 0 -> 6148 bytes tests/base-test.js | 119 +++++++++++++++----------------------- tests/index.js | 4 +- tests/mega-stress-test.js | 21 +++---- tests/stress-test.js | 66 ++++++++++----------- 6 files changed, 99 insertions(+), 140 deletions(-) create mode 100644 tests/.DS_Store diff --git a/README.md b/README.md index c85fba1..2340b56 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ interface-stream-muxer ===================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) +[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) > A test suite and interface you can use to implement a stream muxer. "A one stop shop for all your muxing needs" @@ -13,8 +14,8 @@ The API is presented with both Node.js and Go primitives, however, there is not # Modules that implement the interface -- [Node.js spdy-stream-muxer](https://github.com/diasdavid/node-spdy-stream-muxer) - stream-muxer abstraction on top of [spdy-transport](https://github.com/indutny/spdy-transport) -- [Node.js multiplex-stream-muxer](https://github.com/diasdavid/node-multiplex-stream-muxer) - stream-muxer abstraction on top of [multiplex](https://github.com/maxogden/multiplex) +- [JavaScript libp2p-spdy](https://github.com/diasdavid/js-libp2p-spdy) +- [JavaScript libp2p-multiplex](https://github.com/diasdavid/js-libp2p-multiplex) - [Go spdy, muxado, yamux and multiplex](https://github.com/jbenet/go-stream-muxer) Send a PR to add a new one if you happen to find or write one. @@ -34,20 +35,18 @@ Install interface-stream-muxer as one of the dependencies of your project and as ``` var tape = require('tape') var tests = require('interface-stream-muxer/tests') -var YourStreamMuxer = require('../src') +var yourStreamMuxer = require('../src') var common = { setup: function (t, cb) { - cb(null, YourStreamMuxer) + cb(null, yourStreamMuxer) }, teardown: function (t, cb) { cb() } } -var megaTest = false // a really really intensive test case - -tests(tape, common, megaTest) +tests(tape, common) ``` ## Go @@ -60,8 +59,8 @@ A valid (read: that follows this abstraction) stream muxer, must implement the f ### Attach muxer to a transport -- `Node.js` conn = muxer.attach(transport, isListener) -- `Go` conn, err := muxer.Attach(transport, isListener) +- `Node.js` muxedConn = muxer(transport, isListener) +- `Go` muxedConn, err := muxer.Attach(transport, isListener) This method attaches our stream muxer to the desired transport (UDP, TCP) and returns/callbacks with the `err, conn`(error, connection). @@ -69,13 +68,13 @@ If `err` is passed, no operation should be made in `conn`. `isListener` is a bool that tells the side of the socket we are, `isListener = true` for listener/server and `isListener = false` for dialer/client side. -`conn` interfaces our established Connection with the other endpoint, it must offer an interface to open a stream inside this connection and to receive incomming stream requests. +`muxedConn` interfaces our established Connection with the other endpoint, it must offer an interface to open a stream inside this connection and to receive incomming stream requests. ### Dial(open/create) a new stream -- `Node.js` stream = conn.dialStream([function (err, stream)]) -- `Go` stream, err := conn.DialStream() +- `Node.js` stream = muxedConn.newStream([function (err, stream)]) +- `Go` stream, err := muxedConn.newStream() This method negotiates and opens a new stream with the other endpoint. @@ -87,8 +86,8 @@ In the Node.js case, if no callback is passed, stream will emit an 'ready' event ### Listen(wait/accept) a new incoming stream -- `Node.js` conn.on('stream', function (stream)) -- `Go` stream := conn.Accept() +- `Node.js` muxedConn.on('stream', function (stream) {}) +- `Go` stream := muxedConn.Accept() Each time a dialing peer initiates the new stream handshake, a new stream is created on the listening side. diff --git a/tests/.DS_Store b/tests/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 { + t.pass('got stream') }) - connListener.on('stream', function (stream) { - t.pass('got stream') + dialer.newStream((err, stream) => { + t.ifError(err, 'Should not throw') + t.pass('dialed stream') }) }) }) - test('Open a stream from the listener', function (t) { - common.setup(test, function (err, Muxer) { + common.setup(test, function (err, muxer) { t.plan(4) t.ifError(err, 'Should not throw') var pair = streamPair.create() - var dialer = new Muxer() - var listener = new Muxer() + var dialer = muxer(pair, false) + var listener = muxer(pair.other, true) - var connDialer = dialer.attach(pair, false) - var connListener = listener.attach(pair.other, true) - - connListener.dialStream(function (err, stream) { - t.ifError(err, 'Should not throw') - t.pass('dialed stream') + dialer.on('stream', (stream) => { + t.pass('got stream') }) - connDialer.on('stream', function (stream) { - t.pass('got stream') + listener.newStream((err, stream) => { + t.ifError(err, 'Should not throw') + t.pass('dialed stream') }) }) }) test('Open a stream on both sides', function (t) { - common.setup(test, function (err, Muxer) { + common.setup(test, function (err, muxer) { t.plan(7) t.ifError(err, 'Should not throw') var pair = streamPair.create() - var dialer = new Muxer() - var listener = new Muxer() + var dialer = muxer(pair, false) + var listener = muxer(pair.other, true) - var connDialer = dialer.attach(pair, false) - var connListener = listener.attach(pair.other, true) + dialer.on('stream', (stream) => { + t.pass('got stream') + }) - connDialer.dialStream(function (err, stream) { + listener.newStream((err, stream) => { t.ifError(err, 'Should not throw') - t.pass('dialed stream from dialer') + t.pass('dialed stream') }) - connListener.on('stream', function (stream) { - t.pass('listener got stream') + listener.on('stream', (stream) => { + t.pass('got stream') }) - connListener.dialStream(function (err, stream) { + dialer.newStream((err, stream) => { t.ifError(err, 'Should not throw') - t.pass('dialed stream from listener') - }) - - connDialer.on('stream', function (stream) { - t.pass('dialer got stream') + t.pass('dialed stream') }) }) }) test('Open a stream on one side, write, open a stream in the other side', function (t) { - common.setup(test, function (err, Muxer) { + common.setup(test, function (err, muxer) { t.plan(9) t.ifError(err, 'Should not throw') var pair = streamPair.create() - var dialer = new Muxer() - var listener = new Muxer() + var dialer = muxer(pair, false) + var listener = muxer(pair.other, true) - var connDialer = dialer.attach(pair, false) - var connListener = listener.attach(pair.other, true) - - connDialer.dialStream(function (err, stream) { + dialer.newStream(function (err, stream) { t.ifError(err, 'Should not throw') t.pass('dialed stream from dialer') - stream.write('hey') }) - connListener.on('stream', function (stream) { + listener.on('stream', function (stream) { t.pass('listener got stream') stream.on('data', function (chunk) { t.equal(chunk.toString(), 'hey') }) - connListener.dialStream(function (err, stream) { + listener.newStream(function (err, stream) { t.ifError(err, 'Should not throw') t.pass('dialed stream from listener') stream.write('hello') }) - }) - connDialer.on('stream', function (stream) { + dialer.on('stream', function (stream) { t.pass('dialer got stream') stream.on('data', function (chunk) { @@ -126,18 +110,15 @@ module.exports.all = function (test, common) { }) test('Open a stream using the net.connect pattern', function (t) { - common.setup(test, function (err, Muxer) { - t.plan(3) + common.setup(test, function (err, muxer) { + t.plan(2) t.ifError(err, 'Should not throw') var pair = streamPair.create() - var dialer = new Muxer() - var listener = new Muxer() + var dialer = muxer(pair, false) + var listener = muxer(pair.other, true) - var connDialer = dialer.attach(pair, false) - var connListener = listener.attach(pair.other, true) - - var stream = connListener.dialStream() + var stream = dialer.newStream() stream.on('ready', function () { t.pass('dialed stream') @@ -147,25 +128,22 @@ module.exports.all = function (test, common) { t.ifError(err, 'Should not throw') }) - connDialer.on('stream', function (stream) { + listener.on('stream', function (stream) { t.pass('got stream') }) }) }) test('Buffer writes Open a stream using the net.connect pattern', function (t) { - common.setup(test, function (err, Muxer) { - t.plan(4) + common.setup(test, function (err, muxer) { + t.plan(3) t.ifError(err, 'Should not throw') var pair = streamPair.create() - var dialer = new Muxer() - var listener = new Muxer() + var dialer = muxer(pair, false) + var listener = muxer(pair.other, true) - var connDialer = dialer.attach(pair, false) - var connListener = listener.attach(pair.other, true) - - var stream = connListener.dialStream() + var stream = dialer.newStream() stream.write('buffer this') @@ -177,7 +155,7 @@ module.exports.all = function (test, common) { t.ifError(err, 'Should not throw') }) - connDialer.on('stream', function (stream) { + listener.on('stream', function (stream) { t.pass('got stream') stream.on('data', function (chunk) { @@ -186,5 +164,4 @@ module.exports.all = function (test, common) { }) }) }) - } diff --git a/tests/index.js b/tests/index.js index 1a1d43b..dddff1c 100644 --- a/tests/index.js +++ b/tests/index.js @@ -4,7 +4,5 @@ module.exports = function (test, common, mega) { test = timed(test) require('./base-test.js').all(test, common) require('./stress-test.js').all(test, common) - if (mega) { - require('./mega-stress-test.js').all(test, common) - } + // require('./mega-stress-test.js').all(test, common) } diff --git a/tests/mega-stress-test.js b/tests/mega-stress-test.js index 94fe101..a073985 100644 --- a/tests/mega-stress-test.js +++ b/tests/mega-stress-test.js @@ -1,30 +1,25 @@ var streamPair = require('stream-pair') module.exports.all = function (test, common) { - test('10000 messages of 10000 streams', function (t) { - common.setup(test, function (err, Muxer) { + common.setup(test, function (err, muxer) { t.ifError(err, 'should not throw') var pair = streamPair.create() - spawnGeneration(t, Muxer, pair, pair.other, 10000, 10000) + spawnGeneration(t, muxer, pair, pair.other, 10000, 10000) }) }) - } -function spawnGeneration (t, Muxer, dialerSocket, listenerSocket, nStreams, nMsg, size) { +function spawnGeneration (t, muxer, dialerSocket, listenerSocket, nStreams, nMsg, size) { t.plan(1 + (5 * nStreams) + (nStreams * nMsg)) var msg = !size ? 'simple msg' : 'make the msg bigger' - var listenerMuxer = new Muxer() - var dialerMuxer = new Muxer() + var listener = muxer(listenerSocket, true) + var dialer = muxer(dialerSocket, false) - var listenerConn = listenerMuxer.attach(listenerSocket, true) - var dialerConn = dialerMuxer.attach(dialerSocket, false) - - listenerConn.on('stream', function (stream) { + listener.on('stream', function (stream) { t.pass('Incoming stream') stream.on('data', function (chunk) { @@ -35,11 +30,10 @@ function spawnGeneration (t, Muxer, dialerSocket, listenerSocket, nStreams, nMsg t.pass('Stream ended on Listener') stream.end() }) - }) for (var i = 0; i < nStreams; i++) { - dialerConn.dialStream(function (err, stream) { + dialer.newStream(function (err, stream) { t.ifError(err, 'Should not throw') t.pass('Dialed stream') @@ -58,5 +52,4 @@ function spawnGeneration (t, Muxer, dialerSocket, listenerSocket, nStreams, nMsg stream.end() }) } - } diff --git a/tests/stress-test.js b/tests/stress-test.js index a70c199..c96e57d 100644 --- a/tests/stress-test.js +++ b/tests/stress-test.js @@ -1,131 +1,125 @@ var streamPair = require('stream-pair') module.exports.all = function (test, common) { - test('1 stream with 1 msg', function (t) { - common.setup(test, function (err, Muxer) { + common.setup(test, function (err, muxer) { t.ifError(err, 'should not throw') var pair = streamPair.create() - spawnGeneration(t, Muxer, pair, pair.other, 1, 1) + spawnGeneration(t, muxer, pair, pair.other, 1, 1) }) }) test('1 stream with 10 msg', function (t) { - common.setup(test, function (err, Muxer) { + common.setup(test, function (err, muxer) { t.ifError(err, 'should not throw') var pair = streamPair.create() - spawnGeneration(t, Muxer, pair, pair.other, 1, 10) + spawnGeneration(t, muxer, pair, pair.other, 1, 10) }) }) test('1 stream with 100 msg', function (t) { - common.setup(test, function (err, Muxer) { + common.setup(test, function (err, muxer) { t.ifError(err, 'should not throw') var pair = streamPair.create() - spawnGeneration(t, Muxer, pair, pair.other, 1, 100) + spawnGeneration(t, muxer, pair, pair.other, 1, 100) }) }) test('10 stream with 1 msg', function (t) { - common.setup(test, function (err, Muxer) { + common.setup(test, function (err, muxer) { t.ifError(err, 'should not throw') var pair = streamPair.create() - spawnGeneration(t, Muxer, pair, pair.other, 10, 1) + spawnGeneration(t, muxer, pair, pair.other, 10, 1) }) }) test('10 stream with 10 msg', function (t) { - common.setup(test, function (err, Muxer) { + common.setup(test, function (err, muxer) { t.ifError(err, 'should not throw') var pair = streamPair.create() - spawnGeneration(t, Muxer, pair, pair.other, 10, 10) + spawnGeneration(t, muxer, pair, pair.other, 10, 10) }) }) test('10 stream with 100 msg', function (t) { - common.setup(test, function (err, Muxer) { + common.setup(test, function (err, muxer) { t.ifError(err, 'should not throw') var pair = streamPair.create() - spawnGeneration(t, Muxer, pair, pair.other, 10, 10) + spawnGeneration(t, muxer, pair, pair.other, 10, 10) }) }) test('100 stream with 1 msg', function (t) { - common.setup(test, function (err, Muxer) { + common.setup(test, function (err, muxer) { t.ifError(err, 'should not throw') var pair = streamPair.create() - spawnGeneration(t, Muxer, pair, pair.other, 100, 1) + spawnGeneration(t, muxer, pair, pair.other, 100, 1) }) }) test('100 stream with 10 msg', function (t) { - common.setup(test, function (err, Muxer) { + common.setup(test, function (err, muxer) { t.ifError(err, 'should not throw') var pair = streamPair.create() - spawnGeneration(t, Muxer, pair, pair.other, 100, 10) + spawnGeneration(t, muxer, pair, pair.other, 100, 10) }) }) test('100 stream with 100 msg', function (t) { - common.setup(test, function (err, Muxer) { + common.setup(test, function (err, muxer) { t.ifError(err, 'should not throw') var pair = streamPair.create() - spawnGeneration(t, Muxer, pair, pair.other, 100, 10) + spawnGeneration(t, muxer, pair, pair.other, 100, 10) }) }) test('1000 stream with 1 msg', function (t) { - common.setup(test, function (err, Muxer) { + common.setup(test, function (err, muxer) { t.ifError(err, 'should not throw') var pair = streamPair.create() - spawnGeneration(t, Muxer, pair, pair.other, 1000, 1) + spawnGeneration(t, muxer, pair, pair.other, 1000, 1) }) }) test('1000 stream with 10 msg', function (t) { - common.setup(test, function (err, Muxer) { + common.setup(test, function (err, muxer) { t.ifError(err, 'should not throw') var pair = streamPair.create() - spawnGeneration(t, Muxer, pair, pair.other, 1000, 10) + spawnGeneration(t, muxer, pair, pair.other, 1000, 10) }) }) test('1000 stream with 100 msg', function (t) { - common.setup(test, function (err, Muxer) { + common.setup(test, function (err, muxer) { t.ifError(err, 'should not throw') var pair = streamPair.create() - spawnGeneration(t, Muxer, pair, pair.other, 1000, 100) + spawnGeneration(t, muxer, pair, pair.other, 1000, 100) }) }) - } -function spawnGeneration (t, Muxer, dialerSocket, listenerSocket, nStreams, nMsg, size) { +function spawnGeneration (t, muxer, dialerSocket, listenerSocket, nStreams, nMsg, size) { t.plan(1 + (5 * nStreams) + (nStreams * nMsg)) var msg = !size ? 'simple msg' : 'make the msg bigger' - var listenerMuxer = new Muxer() - var dialerMuxer = new Muxer() + var listener = muxer(listenerSocket, true) + var dialer = muxer(dialerSocket, false) - var listenerConn = listenerMuxer.attach(listenerSocket, true) - var dialerConn = dialerMuxer.attach(dialerSocket, false) - - listenerConn.on('stream', function (stream) { + listener.on('stream', function (stream) { t.pass('Incoming stream') - stream.on('data', function (chunk) { t.pass('Received message') }) @@ -134,11 +128,10 @@ function spawnGeneration (t, Muxer, dialerSocket, listenerSocket, nStreams, nMsg t.pass('Stream ended on Listener') stream.end() }) - }) for (var i = 0; i < nStreams; i++) { - dialerConn.dialStream(function (err, stream) { + dialer.newStream(function (err, stream) { t.ifError(err, 'Should not throw') t.pass('Dialed stream') @@ -157,5 +150,4 @@ function spawnGeneration (t, Muxer, dialerSocket, listenerSocket, nStreams, nMsg stream.end() }) } - } From 6e1896abfa9e0af2a0463455d02707704adf4832 Mon Sep 17 00:00:00 2001 From: David Dias Date: Sun, 6 Mar 2016 22:44:56 +0000 Subject: [PATCH 074/337] Release v0.3.0. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e4ecbf0..7fbece6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.2.5", + "version": "0.3.0", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "directories": { From 1a2150a785c1f93555df0ecd22260e1658597e22 Mon Sep 17 00:00:00 2001 From: David Dias Date: Sun, 6 Mar 2016 22:58:41 +0000 Subject: [PATCH 075/337] fix tests location --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7fbece6..136fe83 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "interface-stream-muxer", "version": "0.3.0", "description": "A test suite and interface you can use to implement a stream muxer.", - "main": "src/index.js", + "main": "tests/index.js", "directories": { "test": "tests" }, From 13bb1e9f2740e0d9bf2aeac5c18f44ac2a039816 Mon Sep 17 00:00:00 2001 From: David Dias Date: Sun, 6 Mar 2016 22:58:51 +0000 Subject: [PATCH 076/337] Release v0.3.1. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 136fe83..f95f649 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.3.0", + "version": "0.3.1", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "tests/index.js", "directories": { From 45e143598c7da31d2ba782f55dfdffa4ce20f8e3 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 22 Mar 2016 14:26:42 +0000 Subject: [PATCH 077/337] update ipld dep --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d8eb994..f470fbd 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "homepage": "https://github.com/diasdavid/interface-record-store", "dependencies": { "ecdsa": "^0.6.0", - "ipld": "^0.2.0", + "ipld": "^0.4.0", "multihashing": "^0.1.3", "timed-tape": "^0.1.0" } From 39af5822fa993fa79d6c79de311332d1e8586a7d Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 22 Mar 2016 14:26:52 +0000 Subject: [PATCH 078/337] Release v0.1.3. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f470fbd..f3d2b55 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-record-store", - "version": "0.1.2", + "version": "0.1.3", "description": "A test suite and interface you can use to implement a a IPRS compliant(https://github.com/ipfs/specs/tree/master/records) Record Store", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" From 1add6a71353abe62a666fe24b39d2cad485ae6b5 Mon Sep 17 00:00:00 2001 From: David Dias Date: Sun, 12 Jun 2016 10:34:01 -0700 Subject: [PATCH 079/337] Revamp the spec, now that there is some battle earned understanding of the needs across transports --- README.md | 105 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 81 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 1ba1fb5..e165568 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,12 @@ interface-transport =================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) +[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) -> A test suite and interface you can use to implement a transport. A transport is understood as something that offers a dial+listen interface +> A test suite and interface you can use to implement a libp2p transport. A libp2p transport is understood as something that offers a dial and listen interface. -The primary goal of this module is to enable developers to pick and swap their Record Store module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by abstract-blob-store and interface-stream-muxer. +The primary goal of this module is to enable developers to pick and swap their transport module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by abstract-blob-store, interface-stream-muxer and others. Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. @@ -15,9 +16,11 @@ The API is presented with both Node.js and Go primitives, however, there is not # Modules that implement the interface -- [node-libp2p-tcp](https://github.com/diasdavid/node-libp2p-tcp) - -note: for any new given implementation that adds one more option to the multiaddr space that was not expected yet, the respective multiaddr should be added to the PeerInfo objects available on the tests, so that implementation can be properly tested. +- [js-libp2p-tcp](https://github.com/diasdavid/node-libp2p-tcp) +- [js-libp2p-webrtc-star](https://github.com/diasdavid/js-libp2p-webrtc-star) +- [js-libp2p-websockets](https://github.com/diasdavid/js-libp2p-websockets) +- [js-libp2p-utp](https://github.com/diasdavid/js-libp2p-utp) +- [webrtc-explorer](https://github.com/diasdavid/webrtc-explorer) # Badge @@ -52,41 +55,95 @@ tests(tape, common) # API -A valid (read: that follows this abstraction) transport, must implement the following API. +A valid (read: that follows the interface defined) transport, must implement the following API. -### Dialing to another Peer +**Table of contents:** -- `Node.js` var stream = transport.dial(multiaddr, [options]) +- type: `Transport` + - `new Transport([options])` + - `transport.dial(multiaddr, [options, callback])` + - event: 'connect' + - event: 'error' + - `transport.createListener([options], handlerFunction)` + - type: `transport.Listener` + - event: 'listening' + - event: 'close' + - event: 'connection' + - event: 'error' + - `listener.listen(multiaddr, [callback])` + - `listener.getAddrs(callback)` + - `listener.close([options])` -This method dials a transport to the Peer referenced by the peerInfo object. +### Creating a transport instance -multiaddr must be of the type [`multiaddr`](http://npmjs.org/multiaddr). +- `JavaScript` - `var transport = new Transport([options])` + +Creates a new Transport instance. `options` is a optional JavaScript object, might include the necessary parameters for the transport instance. + +**Note: Why is it important to instantiate a transport -** Some transports have state that can be shared between the dialing and listening parts. One example is a libp2p-webrtc-star (or pretty much any other WebRTC flavour transport), where that, in order to dial, a peer needs to be part of some signalling network that is shared also with the listener. + +### Dial to another peer + +- `JavaScript` - `var conn = transport.dial(multiaddr, [options, callback])` + +This method dials a transport to the Peer listening on `multiaddr`. + +`multiaddr` must be of the type [`multiaddr`](http://npmjs.org/multiaddr). `stream` must implements the [interface-connection](https://github.com/diasdavid/interface-connection) interface. -`[options]` are not mandatory fields for all the implementations that might be passed for certain implementations for them to work (e.g. a Signalling Server for a WebRTC transport implementation) +`[options]` is an optional argument, which can be used by some implementations -### Listening for incoming transports from other Peers +`callback` should follow the `function (err, conn)` signature. -- `Node.js` var listener = transport.createListener(options, function (stream) {}) +`conn` is the same `conn` that gets returned by call, which should follow [`interface-connection`](https://github.com/diasdavid/interface-connection). This `conn` object can emit 3 extra events: -This method waits and listens for incoming transports by other peers. +- `connect` - +- `timeout` - +- `error` - -`stream` must be a stream that implements the [interface-connection](https://github.com/diasdavid/interface-connection) interface. -Options are the properties this listener must have access in order to properly listen on a given transport/socket +### Create a listener -### Start listening +- `JavaScript` - `var listener = transport.createListener([options], handlerFunction)` -- `Node.js` listener.listen(options, [callback]) +This method creates a listener on the transport. -This method opens the listener to start listening for incoming transports +`options` is an optional object that contains the properties the listener must have, in order to properly listen on a given transport/socket. -### Close an active listener +`handlerFunction` is a function called each time a new connection is received. It must follow the following signature: `function (conn) {}`, where `conn` is a connection that follows the [`interface-connection`](https://github.com/diasdavid/interface-connection). -- `Node.js` listener.close([callback]) +The listener object created, can emit the following events: -This method closes the listener so that no more connections can be open on this transport instance +- `listening` - +- `close` - +- `connection` - +- `error` - -`callback` is function that gets called when the listener is closed. It is optional +### Start a listener +- `JavaScript` - `listener.listen(multiaddr, [callback])` + +This method puts the listener in `listening` mode, waiting for incoming connections. + +`multiaddr` is the address where the listener should bind to. + +`callback` is a function called once the listener is ready. + +### Get listener addrs + +- `JavaScript` - `listener.getAddrs(callback)` + +This method retrieves the addresses in which this listener is listening. Useful for when listening on port 0 or any interface (0.0.0.0). + +### Stop a listener + +- `JavaScript` - `listener.close([options, callback])` + +This method closes the listener so that no more connections can be open on this transport instance. + +`options` is an optional object that might contain the following properties: + + - `timeout` - A timeout value (in ms) that fires and destroys all the connections on this transport if the transport is not able to close graciously. (e.g { timeout: 1000 }) + +`callback` is function that gets called when the listener is closed. It is optional. From e6d0b81f63b76952aae7c7d368facb3d825b7067 Mon Sep 17 00:00:00 2001 From: David Dias Date: Sun, 12 Jun 2016 11:01:32 -0700 Subject: [PATCH 080/337] add required methods by the consumers of the conn obj, to the conn interface --- .gitignore | 3 +++ .npmignore | 29 ++++++++++++++++++++++ README.md | 61 +++++++++++++++++++++++++++++++++++++++++------ package.json | 18 ++++++++++++++ src/connection.js | 53 ++++++++++++++++++++++++++++++++++++++++ src/index.js | 4 ++++ test/test.spec.js | 3 +++ 7 files changed, 164 insertions(+), 7 deletions(-) create mode 100644 .npmignore create mode 100644 src/connection.js create mode 100644 src/index.js create mode 100644 test/test.spec.js diff --git a/.gitignore b/.gitignore index 123ae94..5cd7358 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,6 @@ build/Release # Dependency directory # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git node_modules + +lib +dist diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..00a160d --- /dev/null +++ b/.npmignore @@ -0,0 +1,29 @@ +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git +node_modules + +test diff --git a/README.md b/README.md index e885054..868ee83 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ interface-connection ================== -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) +[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) > A test suite and interface you can use to implement a connection. A connection is understood as something that offers mechanism for writing and reading data, back pressure, half and full duplex streams. This module and test suite were heavily inspired by abstract-blob-store and interface-stream-muxer. @@ -11,12 +12,16 @@ Publishing a test suite as a module lets multiple modules all ensure compatibili The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. -> **IMPORTANT** - Tests are still not finished nor the interface - - # Modules that implement the interface -- [node-libp2p-tcp](https://github.com/diasdavid/node-libp2p-tcp) +- [js-libp2p-tcp](https://github.com/diasdavid/node-libp2p-tcp) +- [js-libp2p-webrtc-star](https://github.com/diasdavid/js-libp2p-webrtc-star) +- [js-libp2p-websockets](https://github.com/diasdavid/js-libp2p-websockets) +- [js-libp2p-utp](https://github.com/diasdavid/js-libp2p-utp) +- [webrtc-explorer](https://github.com/diasdavid/webrtc-explorer) +- [js-libp2p-spdy](https://github.com/diasdavid/js-libp2p-spdy) +- [js-libp2p-multiplex](https://github.com/diasdavid/js-libp2p-multiplex) +- [js-libp2p-secio](https://github.com/ipfs/js-libp2p-secio) # Badge @@ -53,9 +58,51 @@ tests(tape, common) A valid (read: that follows this abstraction) connection, must implement the following API. -notes: +**Table of contents:** + +- type: `Connection` + - `conn.getObservedAddrs(callback)` + - `conn.getPeerInfo(callback)` + - `conn.setPeerInfo(peerInfo)` + - `conn.destroy` + - `conn.write` + - `conn.read` + - `conn.pipe` + - `conn.end` + - `conn.pause` + - `conn.resume` + - `conn.destroy` + - `...` + +### Get the Observed Addresses of the peer in the other end + +- `JavaScript` - `conn.getObservedAddrs(callback)` + +This method retrieves the observed addresses we get from the underlying transport, if any. + +`callback` should follow the follow `function (err, multiaddrs) {}`, where `multiaddrs` is an array of [multiaddr](https://github.com/jbenet/multiaddr). + +### Get the PeerInfo + +- `JavaScript` - `conn.getPeerInfo(callback)` + +This method retrieves the a Peer Info object that contains information about the peer that this conn connects to. + +`callback` should follow the `function (err, peerInfo) {}` signature, where peerInfo is a object of type [Peer Info](https://github.com/diasdavid/js-peer-info) + +### Set the PeerInfo + +- `JavaScript` - `conn.setPeerInfo(peerInfo)` +j +This method stores a reference to the peerInfo Object that contains information about the peer that this conn connects to. + +`peerInfo` is a object of type [Peer Info](https://github.com/diasdavid/js-peer-info) + +--- + +notes: + - should follow the remaining Duplex stream operations - should have backpressure into account - should enable half duplex streams (close from one side, but still open for the other) - should support full duplex - tests should be performed by passing two streams - diff --git a/package.json b/package.json index 8ce1c49..e660a21 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,20 @@ "name": "interface-connection", "version": "0.0.3", "description": "A test suite and interface you can use to implement a connection interface.", + "main": "lib/index.js", + "jsnext:main": "src/index.js", + "scripts": { + "lint": "aegir-lint", + "build": "aegir-build", + "test": "exit 0", + "release": "aegir-release", + "release-minor": "aegir-release --type minor", + "release-major": "aegir-release --type major" + }, + "pre-commit": [ + "lint", + "test" + ], "repository": { "type": "git", "url": "https://github.com/diasdavid/interface-connection.git" @@ -16,6 +30,10 @@ }, "homepage": "https://github.com/diasdavid/interface-connection", "dependencies": { + "duplexify": "^3.4.3", "timed-tape": "^0.1.0" + }, + "devDependencies": { + "aegir": "^3.2.0" } } diff --git a/src/connection.js b/src/connection.js new file mode 100644 index 0000000..72d4766 --- /dev/null +++ b/src/connection.js @@ -0,0 +1,53 @@ +'use strict' + +const util = require('util') +const Duplexify = require('duplexify') + +module.exports = Connection + +util.inherits(Connection, Duplexify) + +function Connection (conn) { + if (!(this instanceof Connection)) { + return new Connection(conn) + } + + Duplexify.call(this) + + let peerInfo + + this.getPeerInfo = (callback) => { + if (conn.getPeerInfo) { + return conn.getPeerInfo(callback) + } + + if (!peerInfo) { + return callback(new Error('Peer Info not set yet')) + } + + callback(null, peerInfo) + } + + this.setPeerInfo = (_peerInfo) => { + if (conn.setPeerInfo) { + return conn.setPeerInfo(_peerInfo) + } + peerInfo = _peerInfo + } + + this.getObservedAddrs = (callback) => { + if (conn.getObservedAddrs) { + return conn.getObservedAddrs(callback) + } + callback(null, []) + } + + this.setInnerConn = (conn) => { + this.setReadable(conn) + this.setWritable(conn) + } + + if (conn) { + this.setInnerConn(conn) + } +} diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..c15a2c7 --- /dev/null +++ b/src/index.js @@ -0,0 +1,4 @@ +'use strict' + +exports.connection = require('./connection.js') +exports.Connection = require('./connection.js') diff --git a/test/test.spec.js b/test/test.spec.js new file mode 100644 index 0000000..68b07e9 --- /dev/null +++ b/test/test.spec.js @@ -0,0 +1,3 @@ +'use strict' + +// so that aegir does not burp From 0ac4c1a938d8d35c17c9795b8bc350e3a3501a94 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 16 Jun 2016 11:19:48 +0100 Subject: [PATCH 081/337] Release v0.2.0. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 72989bb..6c96e7e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.1.1", + "version": "0.2.0", "description": "A test suite and interface you can use to implement a transport.", "repository": { "type": "git", From 1c0c2776b1fa1d91228c88b70252d14200b403e0 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 16 Jun 2016 11:21:16 +0100 Subject: [PATCH 082/337] chore: update contributors --- package.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e660a21..599fea2 100644 --- a/package.json +++ b/package.json @@ -35,5 +35,9 @@ }, "devDependencies": { "aegir": "^3.2.0" - } -} + }, + "contributors": [ + "David Dias ", + "Pau Ramon Revilla " + ] +} \ No newline at end of file From 16a8cdac6f6b13e4c39629a118ffb94ef6bae0b7 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 16 Jun 2016 11:21:16 +0100 Subject: [PATCH 083/337] chore: release version v0.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 599fea2..871df0e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.0.3", + "version": "0.1.0", "description": "A test suite and interface you can use to implement a connection interface.", "main": "lib/index.js", "jsnext:main": "src/index.js", From 8f24d66f4e2a8b1d588bd1376fca8ab7ddbd6134 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 16 Jun 2016 11:45:16 +0100 Subject: [PATCH 084/337] fix version --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 871df0e..bb0936e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.1.0", + "version": "0.1.2", "description": "A test suite and interface you can use to implement a connection interface.", "main": "lib/index.js", "jsnext:main": "src/index.js", @@ -40,4 +40,4 @@ "David Dias ", "Pau Ramon Revilla " ] -} \ No newline at end of file +} From 05200b9b01f7c509ee4a2a40f69dba86c2931a5b Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 16 Jun 2016 11:45:41 +0100 Subject: [PATCH 085/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bb0936e..52816fe 100644 --- a/package.json +++ b/package.json @@ -40,4 +40,4 @@ "David Dias ", "Pau Ramon Revilla " ] -} +} \ No newline at end of file From 3af70ac2e8c8c6aecddb9a73f8843d4ddbc80b99 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 16 Jun 2016 11:45:41 +0100 Subject: [PATCH 086/337] chore: release version v0.1.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 52816fe..48261a7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.1.2", + "version": "0.1.3", "description": "A test suite and interface you can use to implement a connection interface.", "main": "lib/index.js", "jsnext:main": "src/index.js", From eb7f16a202cc225af2b815aebc18f01504158849 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 23 Jun 2016 10:22:20 +0100 Subject: [PATCH 087/337] add destroy method --- src/connection.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/connection.js b/src/connection.js index 72d4766..91725fd 100644 --- a/src/connection.js +++ b/src/connection.js @@ -47,6 +47,13 @@ function Connection (conn) { this.setWritable(conn) } + this.destroy = () => { + if (conn.destroy) { + conn.destroy() + } + this.end() + } + if (conn) { this.setInnerConn(conn) } From 1e4182691a28c18823640c5b45f44edfafceaf26 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 23 Jun 2016 10:23:53 +0100 Subject: [PATCH 089/337] chore: release version v0.1.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 48261a7..545a839 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.1.3", + "version": "0.1.4", "description": "A test suite and interface you can use to implement a connection interface.", "main": "lib/index.js", "jsnext:main": "src/index.js", From a6da1000f5e9221410d1d0506dd5e0ed83b0f007 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 23 Jun 2016 10:33:40 +0100 Subject: [PATCH 090/337] fix .destroy --- src/connection.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/connection.js b/src/connection.js index 91725fd..64d4786 100644 --- a/src/connection.js +++ b/src/connection.js @@ -47,12 +47,7 @@ function Connection (conn) { this.setWritable(conn) } - this.destroy = () => { - if (conn.destroy) { - conn.destroy() - } - this.end() - } + // .destroy is implemented by Duplexify if (conn) { this.setInnerConn(conn) From ee745d23a76dcc339912cfbca0a5732399dcd37a Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 23 Jun 2016 10:33:53 +0100 Subject: [PATCH 092/337] chore: release version v0.1.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 545a839..b88229e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.1.4", + "version": "0.1.5", "description": "A test suite and interface you can use to implement a connection interface.", "main": "lib/index.js", "jsnext:main": "src/index.js", From de465f49864a0ef96541f32339cccac59c96d117 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 23 Jun 2016 16:09:26 +0100 Subject: [PATCH 093/337] use fork fix --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b88229e..876e708 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ }, "homepage": "https://github.com/diasdavid/interface-connection", "dependencies": { - "duplexify": "^3.4.3", + "duplexify": "diasdavid/duplexify#048ec46", "timed-tape": "^0.1.0" }, "devDependencies": { @@ -40,4 +40,4 @@ "David Dias ", "Pau Ramon Revilla " ] -} \ No newline at end of file +} From ce3ea1d444a1611ed9948c5a66bf1d5a47d04845 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 23 Jun 2016 16:09:39 +0100 Subject: [PATCH 094/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 876e708..6393e07 100644 --- a/package.json +++ b/package.json @@ -40,4 +40,4 @@ "David Dias ", "Pau Ramon Revilla " ] -} +} \ No newline at end of file From a8178c3c77265e7a223e20acd9c70a526461571c Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 23 Jun 2016 16:09:39 +0100 Subject: [PATCH 095/337] chore: release version v0.1.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6393e07..a7081db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.1.5", + "version": "0.1.6", "description": "A test suite and interface you can use to implement a connection interface.", "main": "lib/index.js", "jsnext:main": "src/index.js", From 5c1d18924d2a6412201963d31fe6ab9f3d79db47 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 27 Jun 2016 10:06:09 +0100 Subject: [PATCH 096/337] assign conn to the object level scope --- src/connection.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/connection.js b/src/connection.js index 64d4786..03458d5 100644 --- a/src/connection.js +++ b/src/connection.js @@ -17,7 +17,7 @@ function Connection (conn) { let peerInfo this.getPeerInfo = (callback) => { - if (conn.getPeerInfo) { + if (conn && conn.getPeerInfo) { return conn.getPeerInfo(callback) } @@ -29,20 +29,21 @@ function Connection (conn) { } this.setPeerInfo = (_peerInfo) => { - if (conn.setPeerInfo) { + if (conn && conn.setPeerInfo) { return conn.setPeerInfo(_peerInfo) } peerInfo = _peerInfo } this.getObservedAddrs = (callback) => { - if (conn.getObservedAddrs) { + if (conn && conn.getObservedAddrs) { return conn.getObservedAddrs(callback) } callback(null, []) } - this.setInnerConn = (conn) => { + this.setInnerConn = (_conn) => { + conn = _conn this.setReadable(conn) this.setWritable(conn) } From 4f2058a51511181e111ff4d08509fb5f6885a1cf Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 27 Jun 2016 10:10:02 +0100 Subject: [PATCH 098/337] chore: release version v0.1.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a7081db..892dd55 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.1.6", + "version": "0.1.7", "description": "A test suite and interface you can use to implement a connection interface.", "main": "lib/index.js", "jsnext:main": "src/index.js", From 9855579edd3e20cf4b510debbdca0c4cd113a38c Mon Sep 17 00:00:00 2001 From: David Dias Date: Wed, 3 Aug 2016 14:17:53 +0100 Subject: [PATCH 099/337] update duplexify fork, fix #6 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 892dd55..56709eb 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ }, "homepage": "https://github.com/diasdavid/interface-connection", "dependencies": { - "duplexify": "diasdavid/duplexify#048ec46", + "duplexify": "diasdavid/duplexify#a22bcdf", "timed-tape": "^0.1.0" }, "devDependencies": { @@ -40,4 +40,4 @@ "David Dias ", "Pau Ramon Revilla " ] -} \ No newline at end of file +} From 51ea1a6e333ee3b8e37a916f973effbdf8e5e7e9 Mon Sep 17 00:00:00 2001 From: David Dias Date: Wed, 3 Aug 2016 14:19:07 +0100 Subject: [PATCH 100/337] update aegir --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 56709eb..ed92761 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "timed-tape": "^0.1.0" }, "devDependencies": { - "aegir": "^3.2.0" + "aegir": "^4.0.0" }, "contributors": [ "David Dias ", From 3e9621562714ac4426161b0bd7ff2fc0e74962dd Mon Sep 17 00:00:00 2001 From: David Dias Date: Wed, 3 Aug 2016 14:24:06 +0100 Subject: [PATCH 101/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ed92761..7b3d1d7 100644 --- a/package.json +++ b/package.json @@ -40,4 +40,4 @@ "David Dias ", "Pau Ramon Revilla " ] -} +} \ No newline at end of file From 2ecebf14ed4f15d421d2251b3fef0e04b914435b Mon Sep 17 00:00:00 2001 From: David Dias Date: Wed, 3 Aug 2016 14:24:06 +0100 Subject: [PATCH 102/337] chore: release version v0.1.8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7b3d1d7..62a2973 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.1.7", + "version": "0.1.8", "description": "A test suite and interface you can use to implement a connection interface.", "main": "lib/index.js", "jsnext:main": "src/index.js", From 811e27e75e598f49348c98f8adad4b28801a800c Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 4 Aug 2016 19:12:25 +0200 Subject: [PATCH 103/337] chore(package): update dependencies https://greenkeeper.io/ --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index f3d2b55..99f0fba 100644 --- a/package.json +++ b/package.json @@ -22,9 +22,9 @@ }, "homepage": "https://github.com/diasdavid/interface-record-store", "dependencies": { - "ecdsa": "^0.6.0", - "ipld": "^0.4.0", - "multihashing": "^0.1.3", + "ecdsa": "^0.7.0", + "ipld": "^0.6.0", + "multihashing": "^0.2.1", "timed-tape": "^0.1.0" } } From d9b20bea63826362a769418847a132e31317485c Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 4 Aug 2016 19:12:33 +0200 Subject: [PATCH 104/337] chore(package): update dependencies https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6c96e7e..7d18556 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "homepage": "https://github.com/diasdavid/interface-transport", "devDependencies": {}, "dependencies": { - "multiaddr": "^1.0.0", + "multiaddr": "^2.0.2", "timed-tape": "^0.1.0" } } From 1881c590ed0dfc8c883300a8aaf15c4661a81e46 Mon Sep 17 00:00:00 2001 From: Richard Littauer Date: Fri, 5 Aug 2016 09:05:56 -0400 Subject: [PATCH 105/337] Fix spelling error Also slight syntax improvement. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e165568..2dd0479 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ The primary goal of this module is to enable developers to pick and swap their t Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. -The purpose of this interfaceion is not to reinvent any wheels when it comes to dialing and listening to transports, instead, it tries to uniform several transports through a shimmed interface. +The purpose of this interface is not to reinvent any wheels when it comes to dialing and listening to transports. Instead, it tries to uniform several transports through a shimmed interface. The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. From 26c92261d1ebf1966c273aa177f38f2ad7740fd6 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 9 Aug 2016 11:50:55 +0200 Subject: [PATCH 106/337] chore(package): update aegir to version 6.0.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 62a2973..246dc11 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "timed-tape": "^0.1.0" }, "devDependencies": { - "aegir": "^4.0.0" + "aegir": "^6.0.1" }, "contributors": [ "David Dias ", From 278276549794ed6d053c6c04ce32247142310462 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 1 Sep 2016 22:07:12 +0200 Subject: [PATCH 107/337] chore(package): update timed-tape to version 0.1.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f95f649..7e935c9 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,6 @@ "homepage": "https://github.com/diasdavid/interface-stream-muxer", "dependencies": { "stream-pair": "^1.0.3", - "timed-tape": "^0.1.0" + "timed-tape": "^0.1.1" } } From f9266e4036b727731c36100526817f2e5b4f76ed Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 1 Sep 2016 22:07:15 +0200 Subject: [PATCH 108/337] chore(package): update timed-tape to version 0.1.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7d18556..249aa8d 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,6 @@ "devDependencies": {}, "dependencies": { "multiaddr": "^2.0.2", - "timed-tape": "^0.1.0" + "timed-tape": "^0.1.1" } } From 9ad355de5aef520cccc649ba44fab8e44fd1e12a Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 1 Sep 2016 22:07:15 +0200 Subject: [PATCH 109/337] chore(package): update timed-tape to version 0.1.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 246dc11..93aea36 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "homepage": "https://github.com/diasdavid/interface-connection", "dependencies": { "duplexify": "diasdavid/duplexify#a22bcdf", - "timed-tape": "^0.1.0" + "timed-tape": "^0.1.1" }, "devDependencies": { "aegir": "^6.0.1" From 152d962cb664ad927b437905646afc435c5d1942 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 1 Sep 2016 22:07:17 +0200 Subject: [PATCH 110/337] chore(package): update timed-tape to version 0.1.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9ce81db..679bbc0 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,6 @@ "devDependencies": {}, "dependencies": { "peer-id": "^0.3.3", - "timed-tape": "^0.1.0" + "timed-tape": "^0.1.1" } } From 2e12166ba84b661b4f16ae3fd9e581615e2b018a Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 19 Aug 2016 14:37:40 +0100 Subject: [PATCH 111/337] feat(spec): update the dial interface to cope with new pull additions --- README.md | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/README.md b/README.md index 2dd0479..cd43b50 100644 --- a/README.md +++ b/README.md @@ -62,8 +62,6 @@ A valid (read: that follows the interface defined) transport, must implement the - type: `Transport` - `new Transport([options])` - `transport.dial(multiaddr, [options, callback])` - - event: 'connect' - - event: 'error' - `transport.createListener([options], handlerFunction)` - type: `transport.Listener` - event: 'listening' @@ -96,12 +94,7 @@ This method dials a transport to the Peer listening on `multiaddr`. `callback` should follow the `function (err, conn)` signature. -`conn` is the same `conn` that gets returned by call, which should follow [`interface-connection`](https://github.com/diasdavid/interface-connection). This `conn` object can emit 3 extra events: - -- `connect` - -- `timeout` - -- `error` - - +`conn` is the same `conn` that gets returned by call, which should follow [`interface-connection`](https://github.com/diasdavid/interface-connection). `err` is an `Error` instance to signal that the dial was unsuccessful, this error can be a 'timeout' or simply 'error'. ### Create a listener From 1bd20d94d9d8f7ec2b3d79035002e641126f40bf Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 1 Sep 2016 17:34:52 -0400 Subject: [PATCH 112/337] feat(dialer): remove conn from on connect callback --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cd43b50..4097239 100644 --- a/README.md +++ b/README.md @@ -92,9 +92,9 @@ This method dials a transport to the Peer listening on `multiaddr`. `[options]` is an optional argument, which can be used by some implementations -`callback` should follow the `function (err, conn)` signature. +`callback` should follow the `function (err)` signature. -`conn` is the same `conn` that gets returned by call, which should follow [`interface-connection`](https://github.com/diasdavid/interface-connection). `err` is an `Error` instance to signal that the dial was unsuccessful, this error can be a 'timeout' or simply 'error'. +`err` is an `Error` instance to signal that the dial was unsuccessful, this error can be a 'timeout' or simply 'error'. ### Create a listener From d50224dc5d19f237a2ff1a4627a7b58bcc9a2fce Mon Sep 17 00:00:00 2001 From: Friedel Ziegelmayer Date: Fri, 2 Sep 2016 13:31:28 +0200 Subject: [PATCH 113/337] feat(tests): add dial and listen tests --- .gitignore | 12 ++++- .npmignore | 34 +++++++++++++ .travis.yml | 10 ++++ README.md | 34 ++++++++----- package.json | 23 ++++++++- src/dial-test.js | 74 ++++++++++++++++++++++++++++ src/index.js | 12 +++++ src/listen-test.js | 118 +++++++++++++++++++++++++++++++++++++++++++++ tests/base-test.js | 31 ------------ tests/index.js | 6 --- 10 files changed, 300 insertions(+), 54 deletions(-) create mode 100644 .npmignore create mode 100644 .travis.yml create mode 100644 src/dial-test.js create mode 100644 src/index.js create mode 100644 src/listen-test.js delete mode 100644 tests/base-test.js delete mode 100644 tests/index.js diff --git a/.gitignore b/.gitignore index 123ae94..254988d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,13 @@ +**/node_modules/ +**/*.log +test/repo-tests* + # Logs logs *.log +coverage + # Runtime data pids *.pid @@ -19,9 +25,11 @@ coverage # node-waf configuration .lock-wscript -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release +build # Dependency directory # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git node_modules + +lib +dist diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..59335fd --- /dev/null +++ b/.npmignore @@ -0,0 +1,34 @@ +**/node_modules/ +**/*.log +test/repo-tests* + +# Logs +logs +*.log + +coverage + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +build + +# Dependency directory +# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git +node_modules + +test diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..52cd14d --- /dev/null +++ b/.travis.yml @@ -0,0 +1,10 @@ +sudo: false +language: node_js +node_js: + - "stable" + +before_install: + - npm install -g npm + +script: + - npm run lint diff --git a/README.md b/README.md index 4097239..b61e09c 100644 --- a/README.md +++ b/README.md @@ -32,21 +32,29 @@ Include this badge in your readme if you make a module that is compatible with t ## Node.js -``` -var tape = require('tape') -var tests = require('interface-transport/tests') -var YourTransportHandler = require('../src') +```js +/* eslint-env mocha */ +'use strict' -var common = { - setup: function (t, cb) { - cb(null, YourTransportHandler) - }, - teardown: function (t, cb) { - cb() - } -} +const tests = require('interface-transport') +const multiaddr = require('multiaddr') +const YourTransport = require('../src') -tests(tape, common) +describe('compliance', () => { + tests({ + setup (cb) { + let t = new YourTransport() + const addrs = [ + multiaddr('valid-multiaddr-for-your-transport'), + multiaddr('valid-multiaddr2-for-your-transport') + ] + cb(null, t, addrs) + }, + teardown (cb) { + cb() + } + }) +}) ``` ## Go diff --git a/package.json b/package.json index 249aa8d..539c2da 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,21 @@ "type": "git", "url": "https://github.com/diasdavid/interface-transport.git" }, + "main": "src/index.js", + "jsnext:main": "src/index.js", + "scripts": { + "lint": "aegir-lint", + "build": "aegir-build", + "release": "aegir-release", + "release-minor": "aegir-release --type minor", + "release-major": "aegir-release --type major", + "coverage": "exit(0)", + "coverage-publish": "exit(0)" + }, + "pre-commit": [ + "lint", + "test" + ], "keywords": [ "IPFS" ], @@ -15,9 +30,13 @@ "url": "https://github.com/diasdavid/interface-transport/issues" }, "homepage": "https://github.com/diasdavid/interface-transport", - "devDependencies": {}, + "devDependencies": { + "aegir": "^6.0.1" + }, "dependencies": { + "chai": "^3.5.0", "multiaddr": "^2.0.2", - "timed-tape": "^0.1.1" + "pull-goodbye": "0.0.1", + "pull-stream": "^3.4.4" } } diff --git a/src/dial-test.js b/src/dial-test.js new file mode 100644 index 0000000..c4d1d73 --- /dev/null +++ b/src/dial-test.js @@ -0,0 +1,74 @@ +/* eslint-env mocha */ +'use strict' + +const expect = require('chai').expect +const pull = require('pull-stream') +const goodbye = require('pull-goodbye') + +module.exports = (common) => { + describe('dial', () => { + let addrs + let transport + let listener + + before((done) => { + common.setup((err, _transport, _addrs) => { + if (err) return done(err) + transport = _transport + addrs = _addrs + done() + }) + }) + + after((done) => { + common.teardown(done) + }) + + beforeEach((done) => { + listener = transport.createListener((conn) => { + pull( + conn, + pull.map((x) => { + if (x.toString() !== 'GOODBYE') { + return new Buffer(x.toString() + '!') + } + return x + }), + conn + ) + }) + listener.listen(addrs[0], done) + }) + + afterEach((done) => { + listener.close(done) + }) + + it('simple', (done) => { + const s = goodbye({ + source: pull.values([new Buffer('hey')]), + sink: pull.collect((err, values) => { + expect(err).to.not.exist + expect( + values + ).to.be.eql( + [new Buffer('hey!')] + ) + done() + }) + }) + + pull(s, transport.dial(addrs[0]), s) + }) + + it('to non existent listener', (done) => { + pull( + transport.dial(addrs[1]), + pull.onEnd((err) => { + expect(err).to.exist + done() + }) + ) + }) + }) +} diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..e8173e2 --- /dev/null +++ b/src/index.js @@ -0,0 +1,12 @@ +/* eslint-env mocha */ +'use strict' + +const dial = require('./dial-test') +const listen = require('./listen-test') + +module.exports = (common) => { + describe('interface-transport', () => { + dial(common) + listen(common) + }) +} diff --git a/src/listen-test.js b/src/listen-test.js new file mode 100644 index 0000000..5398c59 --- /dev/null +++ b/src/listen-test.js @@ -0,0 +1,118 @@ +/* eslint max-nested-callbacks: ["error", 8] */ +/* eslint-env mocha */ +'use strict' + +const expect = require('chai').expect +const pull = require('pull-stream') + +module.exports = (common) => { + describe('listen', () => { + let addrs + let transport + + before((done) => { + common.setup((err, _transport, _addrs) => { + if (err) return done(err) + transport = _transport + addrs = _addrs + done() + }) + }) + + after((done) => { + common.teardown(done) + }) + + it('simple', (done) => { + const listener = transport.createListener((conn) => {}) + listener.listen(addrs[0], () => { + listener.close(done) + }) + }) + + it('close listener with connections, through timeout', (done) => { + const finish = plan(3, done) + const listener = transport.createListener((conn) => { + pull(conn, conn) + }) + + listener.listen(addrs[0], () => { + const socket1 = transport.dial(addrs[0], () => { + listener.close(finish) + }) + + pull( + transport.dial(addrs[0]), + pull.onEnd(() => { + finish() + }) + ) + + pull( + pull.values([Buffer('Some data that is never handled')]), + socket1, + pull.onEnd(() => { + finish() + }) + ) + }) + }) + + describe('events', () => { + // TODO: figure out why it fails in the full test suite + it.skip('connection', (done) => { + const finish = plan(2, done) + + const listener = transport.createListener() + + listener.on('connection', (conn) => { + expect(conn).to.exist + finish() + }) + + listener.listen(addrs[0], () => { + transport.dial(addrs[0], () => { + listener.close(finish) + }) + }) + }) + + it('listening', (done) => { + const listener = transport.createListener() + listener.on('listening', () => { + listener.close(done) + }) + listener.listen(addrs[0]) + }) + + // TODO: how to get the listener to emit an error? + it.skip('error', (done) => { + const listener = transport.createListener() + listener.on('error', (err) => { + expect(err).to.exist + listener.close(done) + }) + }) + + it('close', (done) => { + const finish = plan(2, done) + const listener = transport.createListener() + listener.on('close', finish) + + listener.listen(addrs[0], () => { + listener.close(finish) + }) + }) + }) + }) +} + +function plan (n, done) { + let i = 0 + return (err) => { + if (err) return done(err) + i++ + + if (i === n) done() + } +} diff --git a/tests/base-test.js b/tests/base-test.js deleted file mode 100644 index bd67f93..0000000 --- a/tests/base-test.js +++ /dev/null @@ -1,31 +0,0 @@ -var multiaddr = require('multiaddr') - -module.exports.all = function (test, common) { - test('a test', function (t) { - common.setup(test, function (err, transport) { - t.plan(5) - t.ifError(err) - - var maddr = multiaddr('/ip4/127.0.0.1/tcp/9050') - - var listener = transport.createListener(function (stream) { - t.pass('received incoming connection') - stream.end() - listener.close(function () { - t.pass('listener closed successfully') - t.end() - }) - }) - - listener.listen(maddr.nodeAddress().port, function () { - t.pass('started listening') - var stream = transport.dial(maddr, { - ready: function () { - t.pass('dialed successfuly') - stream.end() - } - }) - }) - }) - }) -} diff --git a/tests/index.js b/tests/index.js deleted file mode 100644 index b232406..0000000 --- a/tests/index.js +++ /dev/null @@ -1,6 +0,0 @@ -var timed = require('timed-tape') - -module.exports = function (test, common) { - test = timed(test) - require('./base-test.js').all(test, common) -} From 8e9f7cf8c53b48c17082dd65ef8c500dbcc71cb1 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 5 Sep 2016 17:38:41 -0400 Subject: [PATCH 114/337] fix(tests): add place holder test script for releases --- package.json | 1 + test/transport.spec.js | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 test/transport.spec.js diff --git a/package.json b/package.json index 539c2da..7160a0d 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "jsnext:main": "src/index.js", "scripts": { "lint": "aegir-lint", + "test": "aegir-test", "build": "aegir-build", "release": "aegir-release", "release-minor": "aegir-release --type minor", diff --git a/test/transport.spec.js b/test/transport.spec.js new file mode 100644 index 0000000..b7ff1bc --- /dev/null +++ b/test/transport.spec.js @@ -0,0 +1,2 @@ +'use strict' + From 899f392c319702000a7bc592f7c98279ab8844dc Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 5 Sep 2016 17:39:40 -0400 Subject: [PATCH 115/337] chore: update contributors --- package.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 7160a0d..89a3450 100644 --- a/package.json +++ b/package.json @@ -39,5 +39,11 @@ "multiaddr": "^2.0.2", "pull-goodbye": "0.0.1", "pull-stream": "^3.4.4" - } -} + }, + "contributors": [ + "David Dias ", + "Friedel Ziegelmayer ", + "Richard Littauer ", + "greenkeeperio-bot " + ] +} \ No newline at end of file From 8f2a77c3331e73201df36d55ae4f013d0739780a Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 5 Sep 2016 17:39:41 -0400 Subject: [PATCH 116/337] chore: release version v0.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 89a3450..dde3a2e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.2.0", + "version": "0.3.0", "description": "A test suite and interface you can use to implement a transport.", "repository": { "type": "git", From ed5727a0fe47add34a752f46094b8bf5835cab49 Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Tue, 9 Aug 2016 12:16:16 +0200 Subject: [PATCH 117/337] feat(connection): migrate to pull-streams --- README.md | 8 ----- package.json | 6 ++-- src/connection.js | 68 +++++++++++++++++++----------------- src/index.js | 3 +- {tests => test}/base-test.js | 2 ++ {tests => test}/index.js | 2 ++ test/test.spec.js | 3 -- 7 files changed, 44 insertions(+), 48 deletions(-) rename {tests => test}/base-test.js (92%) rename {tests => test}/index.js (91%) delete mode 100644 test/test.spec.js diff --git a/README.md b/README.md index 868ee83..07f962f 100644 --- a/README.md +++ b/README.md @@ -64,14 +64,6 @@ A valid (read: that follows this abstraction) connection, must implement the fol - `conn.getObservedAddrs(callback)` - `conn.getPeerInfo(callback)` - `conn.setPeerInfo(peerInfo)` - - `conn.destroy` - - `conn.write` - - `conn.read` - - `conn.pipe` - - `conn.end` - - `conn.pause` - - `conn.resume` - - `conn.destroy` - `...` ### Get the Observed Addresses of the peer in the other end diff --git a/package.json b/package.json index 93aea36..a4ed3b7 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "interface-connection", "version": "0.1.8", "description": "A test suite and interface you can use to implement a connection interface.", - "main": "lib/index.js", + "main": "src/index.js", "jsnext:main": "src/index.js", "scripts": { "lint": "aegir-lint", @@ -30,8 +30,8 @@ }, "homepage": "https://github.com/diasdavid/interface-connection", "dependencies": { - "duplexify": "diasdavid/duplexify#a22bcdf", "timed-tape": "^0.1.1" + "pull-defer": "^0.2.2", }, "devDependencies": { "aegir": "^6.0.1" @@ -40,4 +40,4 @@ "David Dias ", "Pau Ramon Revilla " ] -} \ No newline at end of file +} diff --git a/src/connection.js b/src/connection.js index 03458d5..02f2786 100644 --- a/src/connection.js +++ b/src/connection.js @@ -1,56 +1,60 @@ 'use strict' -const util = require('util') -const Duplexify = require('duplexify') +const defer = require('pull-defer/duplex') -module.exports = Connection +module.exports = class Connection { + constructor (conn, info) { + this.peerInfo = null + this.conn = defer() -util.inherits(Connection, Duplexify) - -function Connection (conn) { - if (!(this instanceof Connection)) { - return new Connection(conn) + if (conn) { + this.setInnerConn(conn, info) + } else if (info) { + this.info = info + } } - Duplexify.call(this) + get source () { + return this.conn.source + } - let peerInfo + get sink () { + return this.conn.sink + } - this.getPeerInfo = (callback) => { - if (conn && conn.getPeerInfo) { - return conn.getPeerInfo(callback) + getPeerInfo (callback) { + if (this.info && this.info.getPeerInfo) { + return this.info.getPeerInfo(callback) } - if (!peerInfo) { + if (!this.peerInfo) { return callback(new Error('Peer Info not set yet')) } - callback(null, peerInfo) + callback(null, this.peerInfo) } - this.setPeerInfo = (_peerInfo) => { - if (conn && conn.setPeerInfo) { - return conn.setPeerInfo(_peerInfo) + setPeerInfo (peerInfo) { + if (this.info && this.info.setPeerInfo) { + return this.info.setPeerInfo(peerInfo) } - peerInfo = _peerInfo + + this.peerInfo = peerInfo } - this.getObservedAddrs = (callback) => { - if (conn && conn.getObservedAddrs) { - return conn.getObservedAddrs(callback) + getObservedAddrs (callback) { + if (this.info && this.info.getObservedAddrs) { + return this.info.getObservedAddrs(callback) } callback(null, []) } - this.setInnerConn = (_conn) => { - conn = _conn - this.setReadable(conn) - this.setWritable(conn) - } - - // .destroy is implemented by Duplexify - - if (conn) { - this.setInnerConn(conn) + setInnerConn (conn, info) { + this.conn.resolve(conn) + if (info) { + this.info = info + } else { + this.info = conn + } } } diff --git a/src/index.js b/src/index.js index c15a2c7..c4c79fd 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,3 @@ 'use strict' -exports.connection = require('./connection.js') -exports.Connection = require('./connection.js') +exports.Connection = require('./connection') diff --git a/tests/base-test.js b/test/base-test.js similarity index 92% rename from tests/base-test.js rename to test/base-test.js index 4d42a06..b3f0a78 100644 --- a/tests/base-test.js +++ b/test/base-test.js @@ -1,3 +1,5 @@ +'use strict' + module.exports.all = function (test, common) { test('a test', function (t) { common.setup(test, function (err, conn) { diff --git a/tests/index.js b/test/index.js similarity index 91% rename from tests/index.js rename to test/index.js index b232406..5438379 100644 --- a/tests/index.js +++ b/test/index.js @@ -1,3 +1,5 @@ +'use strict' + var timed = require('timed-tape') module.exports = function (test, common) { diff --git a/test/test.spec.js b/test/test.spec.js deleted file mode 100644 index 68b07e9..0000000 --- a/test/test.spec.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict' - -// so that aegir does not burp From e0f7db33bc7b311196c1afc9abbdc62ec358d9aa Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 5 Sep 2016 17:49:56 -0400 Subject: [PATCH 118/337] fix(deps): fix package.json --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a4ed3b7..1aac578 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,8 @@ }, "homepage": "https://github.com/diasdavid/interface-connection", "dependencies": { - "timed-tape": "^0.1.1" - "pull-defer": "^0.2.2", + "timed-tape": "^0.1.1", + "pull-defer": "^0.2.2" }, "devDependencies": { "aegir": "^6.0.1" From 06a51f3ddcc33783309d7e2868df1396b2f0d5ce Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 5 Sep 2016 17:54:35 -0400 Subject: [PATCH 119/337] chore: update contributors --- package.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 1aac578..3fdb018 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,8 @@ }, "contributors": [ "David Dias ", - "Pau Ramon Revilla " + "Pau Ramon Revilla ", + "dignifiedquire ", + "greenkeeperio-bot " ] -} +} \ No newline at end of file From fda59fc8401f50c01768ce0956c61a5679ad97e4 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 5 Sep 2016 17:54:35 -0400 Subject: [PATCH 120/337] chore: release version v0.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3fdb018..a44ec33 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.1.8", + "version": "0.2.0", "description": "A test suite and interface you can use to implement a connection interface.", "main": "src/index.js", "jsnext:main": "src/index.js", From 84cd2ca473f05fc662d24744c66f85432a5c1941 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 5 Sep 2016 18:17:44 -0400 Subject: [PATCH 121/337] fix(package.json): point to right main --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a44ec33..f09d23d 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "interface-connection", "version": "0.2.0", "description": "A test suite and interface you can use to implement a connection interface.", - "main": "src/index.js", + "main": "lib/index.js", "jsnext:main": "src/index.js", "scripts": { "lint": "aegir-lint", @@ -42,4 +42,4 @@ "dignifiedquire ", "greenkeeperio-bot " ] -} \ No newline at end of file +} From c1b28c75436a8e15203360d58dff87c1f16fcc32 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 5 Sep 2016 18:18:04 -0400 Subject: [PATCH 122/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f09d23d..a81393b 100644 --- a/package.json +++ b/package.json @@ -42,4 +42,4 @@ "dignifiedquire ", "greenkeeperio-bot " ] -} +} \ No newline at end of file From 8c9629b00b68fe500a5008df5030dd3524c7845c Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 5 Sep 2016 18:18:04 -0400 Subject: [PATCH 123/337] chore: release version v0.2.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a81393b..a2f41d0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.2.0", + "version": "0.2.1", "description": "A test suite and interface you can use to implement a connection interface.", "main": "lib/index.js", "jsnext:main": "src/index.js", From ace615053a3c58cfb7ca79fa159188bb661eb975 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 5 Sep 2016 18:18:33 -0400 Subject: [PATCH 124/337] fix(package.json): point to right main --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index dde3a2e..f80c0b9 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "type": "git", "url": "https://github.com/diasdavid/interface-transport.git" }, - "main": "src/index.js", + "main": "lib/index.js", "jsnext:main": "src/index.js", "scripts": { "lint": "aegir-lint", @@ -46,4 +46,4 @@ "Richard Littauer ", "greenkeeperio-bot " ] -} \ No newline at end of file +} From 8551ddda3c5da604f1858f5af27b4311d4aeedf7 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 5 Sep 2016 18:18:56 -0400 Subject: [PATCH 125/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f80c0b9..cfe22fa 100644 --- a/package.json +++ b/package.json @@ -46,4 +46,4 @@ "Richard Littauer ", "greenkeeperio-bot " ] -} +} \ No newline at end of file From 95d2a2c4d16d7d6536a826c70554092cec984bcf Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 5 Sep 2016 18:18:56 -0400 Subject: [PATCH 126/337] chore: release version v0.3.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cfe22fa..6730920 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.3.0", + "version": "0.3.1", "description": "A test suite and interface you can use to implement a transport.", "repository": { "type": "git", From e1346da0f150c592a9425ecd8a9ea0e94c595eff Mon Sep 17 00:00:00 2001 From: Friedel Ziegelmayer Date: Tue, 6 Sep 2016 10:16:25 +0200 Subject: [PATCH 127/337] fix(dial-test): ensure goodbye works over tcp --- package.json | 3 ++- src/dial-test.js | 26 +++++++++++--------------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 6730920..8e09a1d 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "chai": "^3.5.0", "multiaddr": "^2.0.2", "pull-goodbye": "0.0.1", + "pull-serializer": "^0.3.2", "pull-stream": "^3.4.4" }, "contributors": [ @@ -46,4 +47,4 @@ "Richard Littauer ", "greenkeeperio-bot " ] -} \ No newline at end of file +} diff --git a/src/dial-test.js b/src/dial-test.js index c4d1d73..8f9d13b 100644 --- a/src/dial-test.js +++ b/src/dial-test.js @@ -4,6 +4,7 @@ const expect = require('chai').expect const pull = require('pull-stream') const goodbye = require('pull-goodbye') +const serializer = require('pull-serializer') module.exports = (common) => { describe('dial', () => { @@ -26,16 +27,7 @@ module.exports = (common) => { beforeEach((done) => { listener = transport.createListener((conn) => { - pull( - conn, - pull.map((x) => { - if (x.toString() !== 'GOODBYE') { - return new Buffer(x.toString() + '!') - } - return x - }), - conn - ) + pull(conn, conn) }) listener.listen(addrs[0], done) }) @@ -45,20 +37,24 @@ module.exports = (common) => { }) it('simple', (done) => { - const s = goodbye({ - source: pull.values([new Buffer('hey')]), + const s = serializer(goodbye({ + source: pull.values(['hey']), sink: pull.collect((err, values) => { expect(err).to.not.exist expect( values ).to.be.eql( - [new Buffer('hey!')] + ['hey'] ) done() }) - }) + })) - pull(s, transport.dial(addrs[0]), s) + pull( + s, + transport.dial(addrs[0]), + s + ) }) it('to non existent listener', (done) => { From 18fa3d09b19bda60e437837f6d66b1f5e9db5648 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 6 Sep 2016 08:29:57 -0400 Subject: [PATCH 128/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8e09a1d..808d403 100644 --- a/package.json +++ b/package.json @@ -47,4 +47,4 @@ "Richard Littauer ", "greenkeeperio-bot " ] -} +} \ No newline at end of file From a979d85ff647b3a8d682047d902891827b95e6f9 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 6 Sep 2016 08:29:57 -0400 Subject: [PATCH 129/337] chore: release version v0.3.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 808d403..de418eb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.3.1", + "version": "0.3.2", "description": "A test suite and interface you can use to implement a transport.", "repository": { "type": "git", From cef3796b944c9594f45a198c537f6b8ac26ecfea Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 6 Sep 2016 08:30:36 -0400 Subject: [PATCH 131/337] chore: release version v0.3.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index de418eb..c42db04 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-transport", - "version": "0.3.2", + "version": "0.3.3", "description": "A test suite and interface you can use to implement a transport.", "repository": { "type": "git", From 0c11d31de44d55e1a4c220503b03c36863c287a7 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 6 Sep 2016 15:11:47 +0200 Subject: [PATCH 132/337] chore(package): update aegir to version 8.0.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a2f41d0..a03fa2f 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "pull-defer": "^0.2.2" }, "devDependencies": { - "aegir": "^6.0.1" + "aegir": "^8.0.0" }, "contributors": [ "David Dias ", From f2d36283e590c3cfdc8bf55a6b7c342e7b7a0cc5 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 6 Sep 2016 15:11:47 +0200 Subject: [PATCH 133/337] chore(package): update aegir to version 8.0.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c42db04..873effd 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/diasdavid/interface-transport", "devDependencies": { - "aegir": "^6.0.1" + "aegir": "^8.0.0" }, "dependencies": { "chai": "^3.5.0", From cc3130fa23802443492bafb36ab6331e379083cf Mon Sep 17 00:00:00 2001 From: Friedel Ziegelmayer Date: Thu, 18 Aug 2016 16:18:17 +0200 Subject: [PATCH 134/337] feat(pull): migration to pull streams. Upgrade tests to use mocha as well --- .gitignore | 12 ++- .npmignore | 34 ++++++++ .travis.yml | 10 +++ README.md | 41 +++++----- package.json | 32 +++++--- src/base-test.js | 146 +++++++++++++++++++++++++++++++++ src/index.js | 14 ++++ src/mega-stress-test.js | 23 ++++++ src/spawner.js | 88 ++++++++++++++++++++ src/stress-test.js | 66 +++++++++++++++ tests/.DS_Store | Bin 6148 -> 0 bytes tests/base-test.js | 167 -------------------------------------- tests/index.js | 8 -- tests/mega-stress-test.js | 55 ------------- tests/stress-test.js | 153 ---------------------------------- 15 files changed, 434 insertions(+), 415 deletions(-) create mode 100644 .npmignore create mode 100644 .travis.yml create mode 100644 src/base-test.js create mode 100644 src/index.js create mode 100644 src/mega-stress-test.js create mode 100644 src/spawner.js create mode 100644 src/stress-test.js delete mode 100644 tests/.DS_Store delete mode 100644 tests/base-test.js delete mode 100644 tests/index.js delete mode 100644 tests/mega-stress-test.js delete mode 100644 tests/stress-test.js diff --git a/.gitignore b/.gitignore index 123ae94..254988d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,13 @@ +**/node_modules/ +**/*.log +test/repo-tests* + # Logs logs *.log +coverage + # Runtime data pids *.pid @@ -19,9 +25,11 @@ coverage # node-waf configuration .lock-wscript -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release +build # Dependency directory # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git node_modules + +lib +dist diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..59335fd --- /dev/null +++ b/.npmignore @@ -0,0 +1,34 @@ +**/node_modules/ +**/*.log +test/repo-tests* + +# Logs +logs +*.log + +coverage + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +build + +# Dependency directory +# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git +node_modules + +test diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..52cd14d --- /dev/null +++ b/.travis.yml @@ -0,0 +1,10 @@ +sudo: false +language: node_js +node_js: + - "stable" + +before_install: + - npm install -g npm + +script: + - npm run lint diff --git a/README.md b/README.md index 2340b56..e5d162e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,10 @@ interface-stream-muxer ===================== [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) +[![](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io/) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) +[![Travis CI](https://travis-ci.org/ipfs/interface-stream-muxer.svg?branch=master)](https://travis-ci.org/ipfs/interface-stream-muxer) +[![Dependency Status](https://david-dm.org/ipfs/interface-stream-muxer.svg?style=flat-square)](https://david-dm.org/ipfs/interface-stream-muxer) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) > A test suite and interface you can use to implement a stream muxer. "A one stop shop for all your muxing needs" @@ -12,48 +15,46 @@ Publishing a test suite as a module lets multiple modules all ensure compatibili The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. -# Modules that implement the interface +## Modules that implement the interface -- [JavaScript libp2p-spdy](https://github.com/diasdavid/js-libp2p-spdy) -- [JavaScript libp2p-multiplex](https://github.com/diasdavid/js-libp2p-multiplex) +- [JavaScript libp2p-spdy](https://github.com/libp2p/js-libp2p-spdy) - [Go spdy, muxado, yamux and multiplex](https://github.com/jbenet/go-stream-muxer) Send a PR to add a new one if you happen to find or write one. -# Badge +## Badge Include this badge in your readme if you make a new module that uses interface-stream-muxer API. ![](/img/badge.png) -# How to use the battery tests +## Usage -## Node.js +### Node.js -Install interface-stream-muxer as one of the dependencies of your project and as a test file, using `tap`, `tape` or a test runner with compatible API, do: +Install `interface-stream-muxer` as one of the dependencies of your project and as a test file. Then, using `mocha` (for Node.js) or a test runner with compatible API, do: -``` -var tape = require('tape') -var tests = require('interface-stream-muxer/tests') -var yourStreamMuxer = require('../src') +```js +const test = require('interface-stream-muxer') -var common = { - setup: function (t, cb) { - cb(null, yourStreamMuxer) +const common = { + setup (cb) { + cb(null, yourMuxer) }, - teardown: function (t, cb) { + teardown (cb) { cb() } } -tests(tape, common) +// use all of the test suits +test(common) ``` -## Go +### Go -> WIP - being written +> WIP -# API +## API A valid (read: that follows this abstraction) stream muxer, must implement the following API. @@ -86,7 +87,7 @@ In the Node.js case, if no callback is passed, stream will emit an 'ready' event ### Listen(wait/accept) a new incoming stream -- `Node.js` muxedConn.on('stream', function (stream) {}) +- `Node.js` muxedConn.on('stream', function (stream) {}) - `Go` stream := muxedConn.Accept() Each time a dialing peer initiates the new stream handshake, a new stream is created on the listening side. diff --git a/package.json b/package.json index 7e935c9..bf1ea9d 100644 --- a/package.json +++ b/package.json @@ -2,16 +2,21 @@ "name": "interface-stream-muxer", "version": "0.3.1", "description": "A test suite and interface you can use to implement a stream muxer.", - "main": "tests/index.js", - "directories": { - "test": "tests" - }, + "main": "src/index.js", + "jsnext:main": "src/index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "exit(0)", + "build": "aegir-build --env node", + "lint": "aegir-lint", + "release": "aegir-release --env node", + "release-minor": "aegir-release --env node --type minor", + "release-major": "aegir-release --env node --type major", + "coverage": "exit(0)", + "coverage-publish": "exit(0)" }, "repository": { "type": "git", - "url": "https://github.com/diasdavid/interface-stream-muxer.git" + "url": "https://github.com/libp2p/interface-stream-muxer.git" }, "keywords": [ "Streams", @@ -22,11 +27,18 @@ "author": "David Dias ", "license": "MIT", "bugs": { - "url": "https://github.com/diasdavid/interface-stream-muxer/issues" + "url": "https://github.com/libp2p/interface-stream-muxer/issues" }, - "homepage": "https://github.com/diasdavid/interface-stream-muxer", + "homepage": "https://github.com/libp2p/interface-stream-muxer", "dependencies": { - "stream-pair": "^1.0.3", - "timed-tape": "^0.1.1" + "async": "^2.0.1", + "chai": "^3.5.0", + "chai-checkmark": "^1.0.1", + "pull-generate": "^2.2.0", + "pull-pair": "^1.1.0", + "pull-stream": "^3.4.3" + }, + "devDependencies": { + "aegir": "^6.0.1" } } diff --git a/src/base-test.js b/src/base-test.js new file mode 100644 index 0000000..62f75c4 --- /dev/null +++ b/src/base-test.js @@ -0,0 +1,146 @@ +/* eslint-env mocha */ +'use strict' + +const chai = require('chai') +chai.use(require('chai-checkmark')) +const expect = chai.expect +const pair = require('pull-pair/duplex') +const pull = require('pull-stream') + +function closeAndWait (stream) { + pull( + pull.empty(), + stream, + pull.onEnd((err) => { + expect(err).to.not.exist.mark() + }) + ) +} + +module.exports = (common) => { + describe('base', () => { + let muxer + + beforeEach((done) => { + common.setup((err, _muxer) => { + if (err) return done(err) + muxer = _muxer + done() + }) + }) + + it('Open a stream from the dialer', (done) => { + const p = pair() + const dialer = muxer.dial(p[0]) + const listener = muxer.listen(p[1]) + + expect(4).checks(done) + + listener.on('stream', (stream) => { + expect(stream).to.exist.mark() + closeAndWait(stream) + }) + + const conn = dialer.newStream((err) => { + expect(err).to.not.exist.mark() + }) + + closeAndWait(conn) + }) + + it('Open a stream from the listener', (done) => { + const p = pair() + const dialer = muxer.dial(p[0]) + const listener = muxer.listen(p[1]) + + expect(4).check(done) + + dialer.on('stream', (stream) => { + expect(stream).to.exist.mark() + closeAndWait(stream) + }) + + const conn = listener.newStream((err) => { + expect(err).to.not.exist.mark() + }) + + closeAndWait(conn) + }) + + it('Open a stream on both sides', (done) => { + const p = pair() + const dialer = muxer.dial(p[0]) + const listener = muxer.listen(p[1]) + + expect(8).check(done) + + dialer.on('stream', (stream) => { + expect(stream).to.exist.mark() + closeAndWait(stream) + }) + + const listenerConn = listener.newStream((err) => { + expect(err).to.not.exist.mark() + }) + + listener.on('stream', (stream) => { + expect(stream).to.exist.mark() + closeAndWait(stream) + }) + + const dialerConn = dialer.newStream((err) => { + expect(err).to.not.exist.mark() + }) + + closeAndWait(dialerConn) + closeAndWait(listenerConn) + }) + + it('Open a stream on one side, write, open a stream in the other side', (done) => { + const p = pair() + const dialer = muxer.dial(p[0]) + const listener = muxer.listen(p[1]) + + expect(6).check(done) + + const dialerConn = dialer.newStream((err) => { + expect(err).to.not.exist.mark() + }) + + pull( + pull.values(['hey']), + dialerConn + ) + + listener.on('stream', (stream) => { + pull( + stream, + pull.collect((err, chunks) => { + expect(err).to.not.exist.mark() + expect(chunks).to.be.eql([Buffer('hey')]).mark() + }) + ) + + const listenerConn = listener.newStream((err) => { + expect(err).to.not.exist.mark() + }) + + pull( + pull.values(['hello']), + listenerConn + ) + + dialer.on('stream', onDialerStream) + function onDialerStream (stream) { + pull( + stream, + pull.collect((err, chunks) => { + expect(err).to.not.exist.mark() + expect(chunks).to.be.eql([Buffer('hello')]).mark() + }) + ) + } + }) + }) + }) +} diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..d7f82bf --- /dev/null +++ b/src/index.js @@ -0,0 +1,14 @@ +/* eslint-env mocha */ +'use strict' + +const baseTest = require('./base-test') +const stressTest = require('./stress-test') +const megaStressTest = require('./mega-stress-test') + +module.exports = (common) => { + describe('interface-stream-muxer', () => { + baseTest(common) + stressTest(common) + megaStressTest(common) + }) +} diff --git a/src/mega-stress-test.js b/src/mega-stress-test.js new file mode 100644 index 0000000..be5a74e --- /dev/null +++ b/src/mega-stress-test.js @@ -0,0 +1,23 @@ +/* eslint-env mocha */ +'use strict' + +const spawn = require('./spawner') + +module.exports = (common) => { + describe.skip('mega stress test', function () { + this.timeout(100 * 200 * 1000) + let muxer + + beforeEach((done) => { + common.setup((err, _muxer) => { + if (err) return done(err) + muxer = _muxer + done() + }) + }) + + it('10000 messages of 10000 streams', (done) => { + spawn(muxer, 10000, 10000, done, 5000) + }) + }) +} diff --git a/src/spawner.js b/src/spawner.js new file mode 100644 index 0000000..a5db6dd --- /dev/null +++ b/src/spawner.js @@ -0,0 +1,88 @@ +'use strict' + +const expect = require('chai').expect + +const pair = require('pull-pair/duplex') +const pull = require('pull-stream') +const generate = require('pull-generate') +const each = require('async/each') +const eachLimit = require('async/eachLimit') + +module.exports = (muxer, nStreams, nMsg, done, limit) => { + const p = pair() + const dialerSocket = p[0] + const listenerSocket = p[1] + + const check = marker((6 * nStreams) + (nStreams * nMsg), done) + + const msg = 'simple msg' + + const listener = muxer.listen(listenerSocket) + const dialer = muxer.dial(dialerSocket) + + listener.on('stream', (stream) => { + expect(stream).to.exist + check() + pull( + stream, + pull.through((chunk) => { + expect(chunk).to.exist + check() + }), + pull.onEnd((err) => { + expect(err).to.not.exist + check() + pull(pull.empty(), stream) + }) + ) + }) + + const numbers = [] + for (let i = 0; i < nStreams; i++) { + numbers.push(i) + } + + const spawnStream = (n, cb) => { + const stream = dialer.newStream((err) => { + expect(err).to.not.exist + check() + expect(stream).to.exist + check() + pull( + generate(0, (s, cb) => { + cb(s === nMsg ? true : null, msg, s + 1) + }), + stream, + pull.collect((err, res) => { + expect(err).to.not.exist + check() + expect(res).to.be.eql([]) + check() + cb() + }) + ) + }) + } + + if (limit) { + eachLimit(numbers, limit, spawnStream, () => {}) + } else { + each(numbers, spawnStream, () => {}) + } +} + +function marker (n, done) { + let i = 0 + return (err) => { + i++ + + if (err) { + console.error('Failed after %s iterations', i) + return done(err) + } + + if (i === n) { + done() + } + } +} diff --git a/src/stress-test.js b/src/stress-test.js new file mode 100644 index 0000000..c42cc2d --- /dev/null +++ b/src/stress-test.js @@ -0,0 +1,66 @@ +/* eslint-env mocha */ +'use strict' + +const spawn = require('./spawner') + +module.exports = (common) => { + describe('stress test', () => { + let muxer + + beforeEach((done) => { + common.setup((err, _muxer) => { + if (err) return done(err) + muxer = _muxer + done() + }) + }) + + it('1 stream with 1 msg', (done) => { + spawn(muxer, 1, 1, done) + }) + + it('1 stream with 10 msg', (done) => { + spawn(muxer, 1, 10, done) + }) + + it('1 stream with 100 msg', (done) => { + spawn(muxer, 1, 100, done) + }) + + it('10 streams with 1 msg', (done) => { + spawn(muxer, 10, 1, done) + }) + + it('10 streams with 10 msg', (done) => { + spawn(muxer, 10, 10, done) + }) + + it('10 streams with 100 msg', (done) => { + spawn(muxer, 10, 100, done) + }) + + it('100 streams with 1 msg', (done) => { + spawn(muxer, 100, 1, done) + }) + + it('100 streams with 10 msg', (done) => { + spawn(muxer, 100, 10, done) + }) + + it('100 streams with 100 msg', (done) => { + spawn(muxer, 100, 100, done) + }) + + it('1000 streams with 1 msg', (done) => { + spawn(muxer, 1000, 1, done) + }) + + it('1000 streams with 10 msg', (done) => { + spawn(muxer, 1000, 10, done) + }) + + it('1000 streams with 100 msg', (done) => { + spawn(muxer, 1000, 100, done) + }) + }) +} diff --git a/tests/.DS_Store b/tests/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 { - t.pass('got stream') - }) - - dialer.newStream((err, stream) => { - t.ifError(err, 'Should not throw') - t.pass('dialed stream') - }) - }) - }) - test('Open a stream from the listener', function (t) { - common.setup(test, function (err, muxer) { - t.plan(4) - t.ifError(err, 'Should not throw') - - var pair = streamPair.create() - var dialer = muxer(pair, false) - var listener = muxer(pair.other, true) - - dialer.on('stream', (stream) => { - t.pass('got stream') - }) - - listener.newStream((err, stream) => { - t.ifError(err, 'Should not throw') - t.pass('dialed stream') - }) - }) - }) - - test('Open a stream on both sides', function (t) { - common.setup(test, function (err, muxer) { - t.plan(7) - t.ifError(err, 'Should not throw') - - var pair = streamPair.create() - var dialer = muxer(pair, false) - var listener = muxer(pair.other, true) - - dialer.on('stream', (stream) => { - t.pass('got stream') - }) - - listener.newStream((err, stream) => { - t.ifError(err, 'Should not throw') - t.pass('dialed stream') - }) - - listener.on('stream', (stream) => { - t.pass('got stream') - }) - - dialer.newStream((err, stream) => { - t.ifError(err, 'Should not throw') - t.pass('dialed stream') - }) - }) - }) - - test('Open a stream on one side, write, open a stream in the other side', function (t) { - common.setup(test, function (err, muxer) { - t.plan(9) - t.ifError(err, 'Should not throw') - - var pair = streamPair.create() - var dialer = muxer(pair, false) - var listener = muxer(pair.other, true) - - dialer.newStream(function (err, stream) { - t.ifError(err, 'Should not throw') - t.pass('dialed stream from dialer') - stream.write('hey') - }) - - listener.on('stream', function (stream) { - t.pass('listener got stream') - - stream.on('data', function (chunk) { - t.equal(chunk.toString(), 'hey') - }) - - listener.newStream(function (err, stream) { - t.ifError(err, 'Should not throw') - t.pass('dialed stream from listener') - - stream.write('hello') - }) - }) - - dialer.on('stream', function (stream) { - t.pass('dialer got stream') - - stream.on('data', function (chunk) { - t.equal(chunk.toString(), 'hello') - }) - }) - }) - }) - - test('Open a stream using the net.connect pattern', function (t) { - common.setup(test, function (err, muxer) { - t.plan(2) - t.ifError(err, 'Should not throw') - - var pair = streamPair.create() - var dialer = muxer(pair, false) - var listener = muxer(pair.other, true) - - var stream = dialer.newStream() - - stream.on('ready', function () { - t.pass('dialed stream') - }) - - stream.on('error', function (err) { - t.ifError(err, 'Should not throw') - }) - - listener.on('stream', function (stream) { - t.pass('got stream') - }) - }) - }) - - test('Buffer writes Open a stream using the net.connect pattern', function (t) { - common.setup(test, function (err, muxer) { - t.plan(3) - t.ifError(err, 'Should not throw') - - var pair = streamPair.create() - var dialer = muxer(pair, false) - var listener = muxer(pair.other, true) - - var stream = dialer.newStream() - - stream.write('buffer this') - - stream.on('ready', function () { - t.pass('dialed stream') - }) - - stream.on('error', function (err) { - t.ifError(err, 'Should not throw') - }) - - listener.on('stream', function (stream) { - t.pass('got stream') - - stream.on('data', function (chunk) { - t.equal(chunk.toString(), 'buffer this') - }) - }) - }) - }) -} diff --git a/tests/index.js b/tests/index.js deleted file mode 100644 index dddff1c..0000000 --- a/tests/index.js +++ /dev/null @@ -1,8 +0,0 @@ -var timed = require('timed-tape') - -module.exports = function (test, common, mega) { - test = timed(test) - require('./base-test.js').all(test, common) - require('./stress-test.js').all(test, common) - // require('./mega-stress-test.js').all(test, common) -} diff --git a/tests/mega-stress-test.js b/tests/mega-stress-test.js deleted file mode 100644 index a073985..0000000 --- a/tests/mega-stress-test.js +++ /dev/null @@ -1,55 +0,0 @@ -var streamPair = require('stream-pair') - -module.exports.all = function (test, common) { - test('10000 messages of 10000 streams', function (t) { - common.setup(test, function (err, muxer) { - t.ifError(err, 'should not throw') - var pair = streamPair.create() - - spawnGeneration(t, muxer, pair, pair.other, 10000, 10000) - }) - }) -} - -function spawnGeneration (t, muxer, dialerSocket, listenerSocket, nStreams, nMsg, size) { - t.plan(1 + (5 * nStreams) + (nStreams * nMsg)) - - var msg = !size ? 'simple msg' : 'make the msg bigger' - - var listener = muxer(listenerSocket, true) - var dialer = muxer(dialerSocket, false) - - listener.on('stream', function (stream) { - t.pass('Incoming stream') - - stream.on('data', function (chunk) { - t.pass('Received message') - }) - - stream.on('end', function () { - t.pass('Stream ended on Listener') - stream.end() - }) - }) - - for (var i = 0; i < nStreams; i++) { - dialer.newStream(function (err, stream) { - t.ifError(err, 'Should not throw') - t.pass('Dialed stream') - - for (var j = 0; j < nMsg; j++) { - stream.write(msg) - } - - stream.on('data', function (chunk) { - t.fail('Should not happen') - }) - - stream.on('end', function () { - t.pass('Stream ended on Dialer') - }) - - stream.end() - }) - } -} diff --git a/tests/stress-test.js b/tests/stress-test.js deleted file mode 100644 index c96e57d..0000000 --- a/tests/stress-test.js +++ /dev/null @@ -1,153 +0,0 @@ -var streamPair = require('stream-pair') - -module.exports.all = function (test, common) { - test('1 stream with 1 msg', function (t) { - common.setup(test, function (err, muxer) { - t.ifError(err, 'should not throw') - var pair = streamPair.create() - - spawnGeneration(t, muxer, pair, pair.other, 1, 1) - }) - }) - - test('1 stream with 10 msg', function (t) { - common.setup(test, function (err, muxer) { - t.ifError(err, 'should not throw') - var pair = streamPair.create() - - spawnGeneration(t, muxer, pair, pair.other, 1, 10) - }) - }) - - test('1 stream with 100 msg', function (t) { - common.setup(test, function (err, muxer) { - t.ifError(err, 'should not throw') - var pair = streamPair.create() - - spawnGeneration(t, muxer, pair, pair.other, 1, 100) - }) - }) - - test('10 stream with 1 msg', function (t) { - common.setup(test, function (err, muxer) { - t.ifError(err, 'should not throw') - var pair = streamPair.create() - - spawnGeneration(t, muxer, pair, pair.other, 10, 1) - }) - }) - - test('10 stream with 10 msg', function (t) { - common.setup(test, function (err, muxer) { - t.ifError(err, 'should not throw') - var pair = streamPair.create() - - spawnGeneration(t, muxer, pair, pair.other, 10, 10) - }) - }) - - test('10 stream with 100 msg', function (t) { - common.setup(test, function (err, muxer) { - t.ifError(err, 'should not throw') - var pair = streamPair.create() - - spawnGeneration(t, muxer, pair, pair.other, 10, 10) - }) - }) - - test('100 stream with 1 msg', function (t) { - common.setup(test, function (err, muxer) { - t.ifError(err, 'should not throw') - var pair = streamPair.create() - - spawnGeneration(t, muxer, pair, pair.other, 100, 1) - }) - }) - - test('100 stream with 10 msg', function (t) { - common.setup(test, function (err, muxer) { - t.ifError(err, 'should not throw') - var pair = streamPair.create() - - spawnGeneration(t, muxer, pair, pair.other, 100, 10) - }) - }) - - test('100 stream with 100 msg', function (t) { - common.setup(test, function (err, muxer) { - t.ifError(err, 'should not throw') - var pair = streamPair.create() - - spawnGeneration(t, muxer, pair, pair.other, 100, 10) - }) - }) - - test('1000 stream with 1 msg', function (t) { - common.setup(test, function (err, muxer) { - t.ifError(err, 'should not throw') - var pair = streamPair.create() - - spawnGeneration(t, muxer, pair, pair.other, 1000, 1) - }) - }) - - test('1000 stream with 10 msg', function (t) { - common.setup(test, function (err, muxer) { - t.ifError(err, 'should not throw') - var pair = streamPair.create() - - spawnGeneration(t, muxer, pair, pair.other, 1000, 10) - }) - }) - - test('1000 stream with 100 msg', function (t) { - common.setup(test, function (err, muxer) { - t.ifError(err, 'should not throw') - var pair = streamPair.create() - - spawnGeneration(t, muxer, pair, pair.other, 1000, 100) - }) - }) -} - -function spawnGeneration (t, muxer, dialerSocket, listenerSocket, nStreams, nMsg, size) { - t.plan(1 + (5 * nStreams) + (nStreams * nMsg)) - - var msg = !size ? 'simple msg' : 'make the msg bigger' - - var listener = muxer(listenerSocket, true) - var dialer = muxer(dialerSocket, false) - - listener.on('stream', function (stream) { - t.pass('Incoming stream') - stream.on('data', function (chunk) { - t.pass('Received message') - }) - - stream.on('end', function () { - t.pass('Stream ended on Listener') - stream.end() - }) - }) - - for (var i = 0; i < nStreams; i++) { - dialer.newStream(function (err, stream) { - t.ifError(err, 'Should not throw') - t.pass('Dialed stream') - - for (var j = 0; j < nMsg; j++) { - stream.write(msg) - } - - stream.on('data', function (chunk) { - t.fail('Should not happen') - }) - - stream.on('end', function () { - t.pass('Stream ended on Dialer') - }) - - stream.end() - }) - } -} From 99d07adfac96786f39ef0a7528f61f99527a660c Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 6 Sep 2016 09:21:46 -0400 Subject: [PATCH 135/337] docs(readme): update it to reference pull-streams --- README.md | 20 ++++++++++---------- package.json | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index e5d162e..96f0712 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Include this badge in your readme if you make a new module that uses interface-s ### Node.js -Install `interface-stream-muxer` as one of the dependencies of your project and as a test file. Then, using `mocha` (for Node.js) or a test runner with compatible API, do: +Install `interface-stream-muxer` as one of the dependencies of your project and as a test file. Then, using `mocha` (for JavaScript) or a test runner with compatible API, do: ```js const test = require('interface-stream-muxer') @@ -58,12 +58,12 @@ test(common) A valid (read: that follows this abstraction) stream muxer, must implement the following API. -### Attach muxer to a transport +### Attach muxer to a Connection -- `Node.js` muxedConn = muxer(transport, isListener) -- `Go` muxedConn, err := muxer.Attach(transport, isListener) +- `JavaScript` muxedConn = muxer(conn, isListener) +- `Go` muxedConn, err := muxer.Attach(conn, isListener) -This method attaches our stream muxer to the desired transport (UDP, TCP) and returns/callbacks with the `err, conn`(error, connection). +This method attaches our stream muxer to an instance of [Connection](https://github.com/libp2p/interface-connection/blob/master/src/connection.js) defined by [interface-connection](https://github.com/libp2p/interface-connection). If `err` is passed, no operation should be made in `conn`. @@ -74,22 +74,22 @@ If `err` is passed, no operation should be made in `conn`. ### Dial(open/create) a new stream -- `Node.js` stream = muxedConn.newStream([function (err, stream)]) +- `JavaScript` stream = muxedConn.newStream([function (err, stream)]) - `Go` stream, err := muxedConn.newStream() This method negotiates and opens a new stream with the other endpoint. If `err` is passed, no operation should be made in `stream`. -`stream` interface our established Stream with the other endpoint, it must implement the [Duplex Stream interface](https://nodejs.org/api/stream.html#stream_class_stream_duplex) in Node.js or the [ReadWriteCloser](http://golang.org/pkg/io/#ReadWriteCloser) in Go. +`stream` interface our established Stream with the other endpoint, it must implement the [Duplex pull-stream interface](https://pull-stream.github.io) in JavaScript or the [ReadWriteCloser](http://golang.org/pkg/io/#ReadWriteCloser) in Go. -In the Node.js case, if no callback is passed, stream will emit an 'ready' event when it is prepared or a 'error' event if it fails to establish the connection, until then, it will buffer the 'write' calls. +In the JavaScript case, if no callback is passed, stream will emit an 'ready' event when it is prepared or a 'error' event if it fails to establish the connection, until then, it will buffer the 'write' calls. ### Listen(wait/accept) a new incoming stream -- `Node.js` muxedConn.on('stream', function (stream) {}) +- `JavaScript` muxedConn.on('stream', function (stream) {}) - `Go` stream := muxedConn.Accept() Each time a dialing peer initiates the new stream handshake, a new stream is created on the listening side. -In Node.js, the Event Emitter pattern is expected to be used in order to receive new incoming streams, while in Go, it expects to wait when Accept is called. +In JavaScript, the Event Emitter pattern is expected to be used in order to receive new incoming streams, while in Go, it expects to wait when Accept is called. diff --git a/package.json b/package.json index bf1ea9d..0015f61 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "interface-stream-muxer", "version": "0.3.1", "description": "A test suite and interface you can use to implement a stream muxer.", - "main": "src/index.js", + "main": "lib/index.js", "jsnext:main": "src/index.js", "scripts": { "test": "exit(0)", From 50696791639afc9b92871a7704b5e72b4cdc7267 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 6 Sep 2016 09:48:21 -0400 Subject: [PATCH 136/337] feat(api): update the interface usage from dial to dialer and listen to listener --- src/base-test.js | 16 ++++++++-------- src/spawner.js | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/base-test.js b/src/base-test.js index 62f75c4..8fa3a4c 100644 --- a/src/base-test.js +++ b/src/base-test.js @@ -31,8 +31,8 @@ module.exports = (common) => { it('Open a stream from the dialer', (done) => { const p = pair() - const dialer = muxer.dial(p[0]) - const listener = muxer.listen(p[1]) + const dialer = muxer.dialer(p[0]) + const listener = muxer.listener(p[1]) expect(4).checks(done) @@ -50,8 +50,8 @@ module.exports = (common) => { it('Open a stream from the listener', (done) => { const p = pair() - const dialer = muxer.dial(p[0]) - const listener = muxer.listen(p[1]) + const dialer = muxer.dialer(p[0]) + const listener = muxer.listener(p[1]) expect(4).check(done) @@ -69,8 +69,8 @@ module.exports = (common) => { it('Open a stream on both sides', (done) => { const p = pair() - const dialer = muxer.dial(p[0]) - const listener = muxer.listen(p[1]) + const dialer = muxer.dialer(p[0]) + const listener = muxer.listener(p[1]) expect(8).check(done) @@ -98,8 +98,8 @@ module.exports = (common) => { it('Open a stream on one side, write, open a stream in the other side', (done) => { const p = pair() - const dialer = muxer.dial(p[0]) - const listener = muxer.listen(p[1]) + const dialer = muxer.dialer(p[0]) + const listener = muxer.listener(p[1]) expect(6).check(done) diff --git a/src/spawner.js b/src/spawner.js index a5db6dd..c6bbdc5 100644 --- a/src/spawner.js +++ b/src/spawner.js @@ -17,8 +17,8 @@ module.exports = (muxer, nStreams, nMsg, done, limit) => { const msg = 'simple msg' - const listener = muxer.listen(listenerSocket) - const dialer = muxer.dial(dialerSocket) + const listener = muxer.listener(listenerSocket) + const dialer = muxer.dialer(dialerSocket) listener.on('stream', (stream) => { expect(stream).to.exist From c06da3b925f6d4700b0b1045f4d0e4ea7d868fb9 Mon Sep 17 00:00:00 2001 From: Friedel Ziegelmayer Date: Tue, 6 Sep 2016 16:05:48 +0200 Subject: [PATCH 137/337] feat(tests): add closing tests, make sure errors are propagated --- package.json | 8 ++- src/close-test.js | 161 ++++++++++++++++++++++++++++++++++++++++++++++ src/index.js | 2 + 3 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 src/close-test.js diff --git a/package.json b/package.json index 0015f61..4f06026 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "interface-stream-muxer", "version": "0.3.1", "description": "A test suite and interface you can use to implement a stream muxer.", - "main": "lib/index.js", + "main": "src/index.js", "jsnext:main": "src/index.js", "scripts": { "test": "exit(0)", @@ -34,9 +34,13 @@ "async": "^2.0.1", "chai": "^3.5.0", "chai-checkmark": "^1.0.1", + "libp2p-tcp": "^0.8.1", + "multiaddr": "^2.0.2", "pull-generate": "^2.2.0", "pull-pair": "^1.1.0", - "pull-stream": "^3.4.3" + "pull-stream": "^3.4.3", + "run-parallel": "^1.1.6", + "run-series": "^1.1.4" }, "devDependencies": { "aegir": "^6.0.1" diff --git a/src/close-test.js b/src/close-test.js new file mode 100644 index 0000000..f7bdc38 --- /dev/null +++ b/src/close-test.js @@ -0,0 +1,161 @@ +/* eslint-env mocha */ +'use strict' + +const chai = require('chai') +chai.use(require('chai-checkmark')) +const expect = chai.expect +const pair = require('pull-pair/duplex') +const pull = require('pull-stream') +const parallel = require('run-parallel') +const series = require('run-series') +const Tcp = require('libp2p-tcp') +const multiaddr = require('multiaddr') + +const mh = multiaddr('/ip4/127.0.0.1/tcp/9090') + +function closeAndWait (stream) { + pull( + pull.empty(), + stream, + pull.onEnd((err) => { + expect(err).to.not.exist.mark() + }) + ) +} + +module.exports = (common) => { + describe.only('close', () => { + let muxer + + beforeEach((done) => { + common.setup((err, _muxer) => { + if (err) return done(err) + muxer = _muxer + done() + }) + }) + + it('closing underlying closes streams (tcp)', (done) => { + expect(2).checks(done) + + const tcp = new Tcp() + const tcpListener = tcp.createListener((socket) => { + const listener = muxer.listen(socket) + listener.on('stream', (stream) => { + pull(stream, stream) + }) + }) + + tcpListener.listen(mh, () => { + const dialer = muxer.dial(tcp.dial(mh, () => { + tcpListener.close() + })) + + const s1 = dialer.newStream(() => { + pull( + s1, + pull.onEnd((err) => { + expect(err).to.exist.mark() + }) + ) + + const s2 = dialer.newStream(() => { + pull( + s2, + pull.onEnd((err) => { + expect(err).to.exist.mark() + }) + ) + }) + }) + }) + }) + + it('closing one of the muxed streams doesn\'t close others', (done) => { + const p = pair() + const dialer = muxer.dial(p[0]) + const listener = muxer.listen(p[1]) + + expect(6).checks(done) + + const conns = [] + + listener.on('stream', (stream) => { + expect(stream).to.exist.mark() + pull(stream, stream) + }) + + for (let i = 0; i < 5; i++) { + conns.push(dialer.newStream()) + } + + conns.forEach((conn, i) => { + if (i === 2) { + closeAndWait(conn) + } else { + pull( + conn, + pull.onEnd(() => { + throw new Error('should not end') + }) + ) + } + }) + }) + + it.skip('closing on spdy doesn\'t close until all the streams that are being muxed are closed', (done) => { + const p = pair() + const dialer = muxer.dial(p[0]) + const listener = muxer.listen(p[1]) + + expect(15).checks(done) + + const conns = [] + const count = [] + for (let i = 0; i < 5; i++) { + count.push(i) + } + + series(count.map((i) => (cb) => { + parallel([ + (cb) => listener.once('stream', (stream) => { + console.log('pipe') + expect(stream).to.exist.mark() + pull(stream, stream) + cb() + }), + (cb) => conns.push(dialer.newStream(cb)) + ], cb) + }), (err) => { + if (err) return done(err) + + conns.forEach((conn, i) => { + pull( + pull.values([Buffer('hello')]), + pull.asyncMap((val, cb) => { + setTimeout(() => { + cb(null, val) + }, i * 10) + }), + pull.through((val) => console.log('send', val)), + conn, + pull.through((val) => console.log('recv', val)), + pull.collect((err, data) => { + console.log('end', i) + expect(err).to.not.exist.mark() + expect(data).to.be.eql([Buffer('hello')]).mark() + }) + ) + }) + + listener.on('close', () => { + console.log('closed listener') + }) + + dialer.end(() => { + console.log('CLOSED') + }) + }) + }) + }) +} diff --git a/src/index.js b/src/index.js index d7f82bf..b182e27 100644 --- a/src/index.js +++ b/src/index.js @@ -2,12 +2,14 @@ 'use strict' const baseTest = require('./base-test') +const closeTest = require('./close-test') const stressTest = require('./stress-test') const megaStressTest = require('./mega-stress-test') module.exports = (common) => { describe('interface-stream-muxer', () => { baseTest(common) + closeTest(common) stressTest(common) megaStressTest(common) }) From 98b08fda06f2cd745655ce87b2b7263d730cc15e Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 6 Sep 2016 17:09:04 -0400 Subject: [PATCH 138/337] docs(readme): update spec and code accordingly --- README.md | 2 -- package.json | 6 +++--- src/close-test.js | 13 +++++++------ src/index.js | 7 +++++-- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 96f0712..a0de266 100644 --- a/README.md +++ b/README.md @@ -83,8 +83,6 @@ If `err` is passed, no operation should be made in `stream`. `stream` interface our established Stream with the other endpoint, it must implement the [Duplex pull-stream interface](https://pull-stream.github.io) in JavaScript or the [ReadWriteCloser](http://golang.org/pkg/io/#ReadWriteCloser) in Go. -In the JavaScript case, if no callback is passed, stream will emit an 'ready' event when it is prepared or a 'error' event if it fails to establish the connection, until then, it will buffer the 'write' calls. - ### Listen(wait/accept) a new incoming stream - `JavaScript` muxedConn.on('stream', function (stream) {}) diff --git a/package.json b/package.json index 4f06026..fcec055 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "interface-stream-muxer", "version": "0.3.1", "description": "A test suite and interface you can use to implement a stream muxer.", - "main": "src/index.js", + "main": "lib/index.js", "jsnext:main": "src/index.js", "scripts": { "test": "exit(0)", @@ -21,7 +21,6 @@ "keywords": [ "Streams", "Muxer", - "interface", "Interface" ], "author": "David Dias ", @@ -34,6 +33,7 @@ "async": "^2.0.1", "chai": "^3.5.0", "chai-checkmark": "^1.0.1", + "detect-node": "^2.0.3", "libp2p-tcp": "^0.8.1", "multiaddr": "^2.0.2", "pull-generate": "^2.2.0", @@ -43,6 +43,6 @@ "run-series": "^1.1.4" }, "devDependencies": { - "aegir": "^6.0.1" + "aegir": "^8.0.0" } } diff --git a/src/close-test.js b/src/close-test.js index f7bdc38..601ee99 100644 --- a/src/close-test.js +++ b/src/close-test.js @@ -1,4 +1,5 @@ /* eslint-env mocha */ +/* eslint max-nested-callbacks: ["error", 8] */ 'use strict' const chai = require('chai') @@ -11,7 +12,7 @@ const series = require('run-series') const Tcp = require('libp2p-tcp') const multiaddr = require('multiaddr') -const mh = multiaddr('/ip4/127.0.0.1/tcp/9090') +const mh = multiaddr('/ip4/127.0.0.1/tcp/10000') function closeAndWait (stream) { pull( @@ -24,7 +25,7 @@ function closeAndWait (stream) { } module.exports = (common) => { - describe.only('close', () => { + describe('close', () => { let muxer beforeEach((done) => { @@ -40,14 +41,14 @@ module.exports = (common) => { const tcp = new Tcp() const tcpListener = tcp.createListener((socket) => { - const listener = muxer.listen(socket) + const listener = muxer.listener(socket) listener.on('stream', (stream) => { pull(stream, stream) }) }) tcpListener.listen(mh, () => { - const dialer = muxer.dial(tcp.dial(mh, () => { + const dialer = muxer.dialer(tcp.dial(mh, () => { tcpListener.close() })) @@ -73,8 +74,8 @@ module.exports = (common) => { it('closing one of the muxed streams doesn\'t close others', (done) => { const p = pair() - const dialer = muxer.dial(p[0]) - const listener = muxer.listen(p[1]) + const dialer = muxer.dialer(p[0]) + const listener = muxer.listener(p[1]) expect(6).checks(done) diff --git a/src/index.js b/src/index.js index b182e27..9006539 100644 --- a/src/index.js +++ b/src/index.js @@ -2,14 +2,17 @@ 'use strict' const baseTest = require('./base-test') -const closeTest = require('./close-test') const stressTest = require('./stress-test') const megaStressTest = require('./mega-stress-test') +const isNode = require('detect-node') module.exports = (common) => { describe('interface-stream-muxer', () => { baseTest(common) - closeTest(common) + if (isNode) { + const closeTest = require('./close-test') + closeTest(common) + } stressTest(common) megaStressTest(common) }) From 949faf02ae2505abfc5be9fa1c1f00be0e4288ea Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 6 Sep 2016 18:08:36 -0400 Subject: [PATCH 139/337] feat(tests): stub test for aegir to verify --- test/stream-muxer.spec.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 test/stream-muxer.spec.js diff --git a/test/stream-muxer.spec.js b/test/stream-muxer.spec.js new file mode 100644 index 0000000..ccacec3 --- /dev/null +++ b/test/stream-muxer.spec.js @@ -0,0 +1 @@ +'use strict' From 1d856785d53e81704a00191f7905b923e6a585cc Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 6 Sep 2016 18:10:51 -0400 Subject: [PATCH 140/337] chore: update contributors --- package.json | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index fcec055..0b8dce3 100644 --- a/package.json +++ b/package.json @@ -44,5 +44,12 @@ }, "devDependencies": { "aegir": "^8.0.0" - } -} + }, + "contributors": [ + "David Dias ", + "David Dias ", + "Friedel Ziegelmayer ", + "Jeffrey Hulten ", + "greenkeeperio-bot " + ] +} \ No newline at end of file From b71292d80869204ff9c1c02976192a639c7233ad Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 6 Sep 2016 18:10:51 -0400 Subject: [PATCH 141/337] chore: release version v0.4.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0b8dce3..c926eba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.3.1", + "version": "0.4.0", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "lib/index.js", "jsnext:main": "src/index.js", From 76b14e97306c34432c027eed37472634a3c77013 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 8 Sep 2016 01:20:12 +0200 Subject: [PATCH 142/337] chore(package): update multiaddr to version 2.0.3 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c926eba..095d326 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "chai-checkmark": "^1.0.1", "detect-node": "^2.0.3", "libp2p-tcp": "^0.8.1", - "multiaddr": "^2.0.2", + "multiaddr": "^2.0.3", "pull-generate": "^2.2.0", "pull-pair": "^1.1.0", "pull-stream": "^3.4.3", From 02823042dc7c0e38b97da553e2e8274b03e038a2 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 8 Sep 2016 01:20:22 +0200 Subject: [PATCH 143/337] chore(package): update multiaddr to version 2.0.3 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 873effd..165587b 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ }, "dependencies": { "chai": "^3.5.0", - "multiaddr": "^2.0.2", + "multiaddr": "^2.0.3", "pull-goodbye": "0.0.1", "pull-serializer": "^0.3.2", "pull-stream": "^3.4.4" From 9f6939118a178e51aec61cff7be4fdc6da85e0c1 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Fri, 9 Sep 2016 01:34:19 +0200 Subject: [PATCH 144/337] chore(package): update aegir to version 8.0.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 095d326..7ea8eb9 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "run-series": "^1.1.4" }, "devDependencies": { - "aegir": "^8.0.0" + "aegir": "^8.0.1" }, "contributors": [ "David Dias ", From 4798da78aa07443b7ee0c84d46d6e5ab4b82497a Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Fri, 9 Sep 2016 01:34:26 +0200 Subject: [PATCH 145/337] chore(package): update aegir to version 8.0.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a03fa2f..1c7a242 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "pull-defer": "^0.2.2" }, "devDependencies": { - "aegir": "^8.0.0" + "aegir": "^8.0.1" }, "contributors": [ "David Dias ", From de9f12d395f053c7919bd8eba5f9bddca503937d Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Fri, 9 Sep 2016 01:34:26 +0200 Subject: [PATCH 146/337] chore(package): update aegir to version 8.0.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 165587b..0a2e0b2 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/diasdavid/interface-transport", "devDependencies": { - "aegir": "^8.0.0" + "aegir": "^8.0.1" }, "dependencies": { "chai": "^3.5.0", From b11577e2a6baa5f0b11ec923a34b88dd9be23a9f Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Mon, 26 Sep 2016 16:09:51 +0200 Subject: [PATCH 147/337] chore(package): update aegir to version 8.1.2 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7ea8eb9..ab4227e 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "run-series": "^1.1.4" }, "devDependencies": { - "aegir": "^8.0.1" + "aegir": "^8.1.2" }, "contributors": [ "David Dias ", From 2ef6c67834a7ea77500721dbf1ff84dd39a22134 Mon Sep 17 00:00:00 2001 From: Patrik Wallstrom Date: Tue, 27 Sep 2016 13:33:13 +0200 Subject: [PATCH 148/337] Working link to IPRS spec --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6c27305..d2b6601 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ interface-record-store [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) -> A test suite and interface you can use to implement a a IPRS compliant(https://github.com/ipfs/specs/tree/master/records) Record Store. +> A test suite and interface you can use to implement a a [IPRS compliant](https://github.com/ipfs/specs/tree/master/iprs-interplanetary-record-system) Record Store. The primary goal of this module is to enable developers to pick and swap their Record Store module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by [`abstract-blob-store`](https://github.com/maxogden/abstract-blob-store) and [`interface-stream-muxer`](https://github.com/diasdavid/interface-stream-muxer). From 163dd9d1e81ed04097ef6d1b65ca1513b14199ac Mon Sep 17 00:00:00 2001 From: Richard Littauer Date: Fri, 30 Sep 2016 14:41:54 -0400 Subject: [PATCH 149/337] Update README URLs based on HTTP redirects --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 07f962f..447cee5 100644 --- a/README.md +++ b/README.md @@ -14,14 +14,14 @@ The API is presented with both Node.js and Go primitives, however, there is not # Modules that implement the interface -- [js-libp2p-tcp](https://github.com/diasdavid/node-libp2p-tcp) -- [js-libp2p-webrtc-star](https://github.com/diasdavid/js-libp2p-webrtc-star) -- [js-libp2p-websockets](https://github.com/diasdavid/js-libp2p-websockets) -- [js-libp2p-utp](https://github.com/diasdavid/js-libp2p-utp) +- [js-libp2p-tcp](https://github.com/libp2p/js-libp2p-tcp) +- [js-libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) +- [js-libp2p-websockets](https://github.com/libp2p/js-libp2p-websockets) +- [js-libp2p-utp](https://github.com/libp2p/js-libp2p-utp) - [webrtc-explorer](https://github.com/diasdavid/webrtc-explorer) -- [js-libp2p-spdy](https://github.com/diasdavid/js-libp2p-spdy) -- [js-libp2p-multiplex](https://github.com/diasdavid/js-libp2p-multiplex) -- [js-libp2p-secio](https://github.com/ipfs/js-libp2p-secio) +- [js-libp2p-spdy](https://github.com/libp2p/js-libp2p-spdy) +- [js-libp2p-multiplex](https://github.com/libp2p/js-libp2p-multiplex) +- [js-libp2p-secio](https://github.com/libp2p/js-libp2p-secio) # Badge @@ -72,7 +72,7 @@ A valid (read: that follows this abstraction) connection, must implement the fol This method retrieves the observed addresses we get from the underlying transport, if any. -`callback` should follow the follow `function (err, multiaddrs) {}`, where `multiaddrs` is an array of [multiaddr](https://github.com/jbenet/multiaddr). +`callback` should follow the follow `function (err, multiaddrs) {}`, where `multiaddrs` is an array of [multiaddr](https://github.com/multiformats/multiaddr). ### Get the PeerInfo @@ -80,7 +80,7 @@ This method retrieves the observed addresses we get from the underlying transpor This method retrieves the a Peer Info object that contains information about the peer that this conn connects to. -`callback` should follow the `function (err, peerInfo) {}` signature, where peerInfo is a object of type [Peer Info](https://github.com/diasdavid/js-peer-info) +`callback` should follow the `function (err, peerInfo) {}` signature, where peerInfo is a object of type [Peer Info](https://github.com/libp2p/js-peer-info) ### Set the PeerInfo From 969a7fe5a7efd0d6c2f6fdf22cf56c9ab11f5f66 Mon Sep 17 00:00:00 2001 From: Richard Littauer Date: Fri, 30 Sep 2016 14:42:13 -0400 Subject: [PATCH 150/337] Update README URLs based on HTTP redirects --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 37c935e..63a33a5 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ The API is presented with both Node.js and Go primitives, however, there is not # Modules that implement the interface -- https://github.com/diasdavid/node-ipfs-kad-router +- https://github.com/libp2p/js-libp2p-kad-routing # Badge From cf45d844429024b1054d10c2768d2e4dfea837ac Mon Sep 17 00:00:00 2001 From: Richard Littauer Date: Fri, 30 Sep 2016 14:42:28 -0400 Subject: [PATCH 151/337] Update README URLs based on HTTP redirects --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6c27305..027fd7e 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ interface-record-store > A test suite and interface you can use to implement a a IPRS compliant(https://github.com/ipfs/specs/tree/master/records) Record Store. -The primary goal of this module is to enable developers to pick and swap their Record Store module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by [`abstract-blob-store`](https://github.com/maxogden/abstract-blob-store) and [`interface-stream-muxer`](https://github.com/diasdavid/interface-stream-muxer). +The primary goal of this module is to enable developers to pick and swap their Record Store module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by [`abstract-blob-store`](https://github.com/maxogden/abstract-blob-store) and [`interface-stream-muxer`](https://github.com/libp2p/interface-stream-muxer). Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. @@ -13,8 +13,8 @@ The API is presented with both Node.js and Go primitives, however, there is not # Modules that implement the interface -- [ipfs-distributed-record-store](https://github.com/diasdavid/node-ipfs-distributed-record-store) -- [ipfs-kad-record-store](https://github.com/diasdavid/node-ipfs-kad-record-store) +- [ipfs-distributed-record-store](https://github.com/libp2p/js-libp2p-distributed-record-store) +- [ipfs-kad-record-store](https://github.com/libp2p/js-libp2p-kad-record-store) # Badge From 9df6689175a0d11553a1a359b5c1f9a3297dc42e Mon Sep 17 00:00:00 2001 From: Richard Littauer Date: Fri, 30 Sep 2016 14:42:49 -0400 Subject: [PATCH 152/337] Update README URLs based on HTTP redirects --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b61e09c..f5eede4 100644 --- a/README.md +++ b/README.md @@ -16,10 +16,10 @@ The API is presented with both Node.js and Go primitives, however, there is not # Modules that implement the interface -- [js-libp2p-tcp](https://github.com/diasdavid/node-libp2p-tcp) -- [js-libp2p-webrtc-star](https://github.com/diasdavid/js-libp2p-webrtc-star) -- [js-libp2p-websockets](https://github.com/diasdavid/js-libp2p-websockets) -- [js-libp2p-utp](https://github.com/diasdavid/js-libp2p-utp) +- [js-libp2p-tcp](https://github.com/libp2p/js-libp2p-tcp) +- [js-libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) +- [js-libp2p-websockets](https://github.com/libp2p/js-libp2p-websockets) +- [js-libp2p-utp](https://github.com/libp2p/js-libp2p-utp) - [webrtc-explorer](https://github.com/diasdavid/webrtc-explorer) # Badge @@ -94,9 +94,9 @@ Creates a new Transport instance. `options` is a optional JavaScript object, mig This method dials a transport to the Peer listening on `multiaddr`. -`multiaddr` must be of the type [`multiaddr`](http://npmjs.org/multiaddr). +`multiaddr` must be of the type [`multiaddr`](https://www.npmjs.com/multiaddr). -`stream` must implements the [interface-connection](https://github.com/diasdavid/interface-connection) interface. +`stream` must implements the [interface-connection](https://github.com/libp2p/interface-connection) interface. `[options]` is an optional argument, which can be used by some implementations From e62f4387a998baad82004db3f1bfab066cd834b3 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Sun, 16 Oct 2016 18:58:46 -0400 Subject: [PATCH 153/337] chore(package): update async to version 2.1.2 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7ea8eb9..4151e99 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ }, "homepage": "https://github.com/libp2p/interface-stream-muxer", "dependencies": { - "async": "^2.0.1", + "async": "^2.1.2", "chai": "^3.5.0", "chai-checkmark": "^1.0.1", "detect-node": "^2.0.3", From b40114c849d767c4626ddaace0065723ac080a99 Mon Sep 17 00:00:00 2001 From: Friedel Ziegelmayer Date: Tue, 1 Nov 2016 12:43:56 +0100 Subject: [PATCH 154/337] feat: async crypto + sauce labs + aegir 9 --- .gitignore | 1 - .travis.yml | 35 +++++++++++++++++++++++++++++++++++ README.md | 2 ++ circle.yml | 15 +++++++++++++++ package.json | 14 ++++++++------ 5 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 .travis.yml create mode 100644 circle.yml diff --git a/.gitignore b/.gitignore index 5cd7358..907c78a 100644 --- a/.gitignore +++ b/.gitignore @@ -26,5 +26,4 @@ build/Release # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git node_modules -lib dist diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..df53c3d --- /dev/null +++ b/.travis.yml @@ -0,0 +1,35 @@ +sudo: false +language: node_js + +matrix: + include: + - node_js: 4 + env: CXX=g++-4.8 + - node_js: 6 + env: + - SAUCE=true + - CXX=g++-4.8 + - node_js: stable + env: CXX=g++-4.8 + +# Make sure we have new NPM. +before_install: + - npm install -g npm + +script: + - npm run lint + +before_script: + - export DISPLAY=:99.0 + - sh -e /etc/init.d/xvfb start + +after_success: + - npm run coverage-publish + +addons: + firefox: 'latest' + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-4.8 \ No newline at end of file diff --git a/README.md b/README.md index 447cee5..730bf4d 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ interface-connection [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) +![](https://img.shields.io/badge/npm-%3E%3D3.0.0-orange.svg?style=flat-square) +![](https://img.shields.io/badge/Node.js-%3E%3D4.0.0-orange.svg?style=flat-square) > A test suite and interface you can use to implement a connection. A connection is understood as something that offers mechanism for writing and reading data, back pressure, half and full duplex streams. This module and test suite were heavily inspired by abstract-blob-store and interface-stream-muxer. diff --git a/circle.yml b/circle.yml new file mode 100644 index 0000000..95f6ee4 --- /dev/null +++ b/circle.yml @@ -0,0 +1,15 @@ +machine: + node: + version: stable + +test: + override: + - npm run lint +dependencies: + pre: + - google-chrome --version + - wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - + - sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' + - sudo apt-get update + - sudo apt-get --only-upgrade install google-chrome-stable + - google-chrome --version diff --git a/package.json b/package.json index 1c7a242..6ee73d7 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,7 @@ "name": "interface-connection", "version": "0.2.1", "description": "A test suite and interface you can use to implement a connection interface.", - "main": "lib/index.js", - "jsnext:main": "src/index.js", + "main": "src/index.js", "scripts": { "lint": "aegir-lint", "build": "aegir-build", @@ -18,7 +17,7 @@ ], "repository": { "type": "git", - "url": "https://github.com/diasdavid/interface-connection.git" + "url": "https://github.com/libp2p/interface-connection.git" }, "keywords": [ "IPFS" @@ -26,15 +25,18 @@ "author": "David Dias ", "license": "MIT", "bugs": { - "url": "https://github.com/diasdavid/interface-connection/issues" + "url": "https://github.com/libp2p/interface-connection/issues" }, - "homepage": "https://github.com/diasdavid/interface-connection", + "homepage": "https://github.com/libp2p/interface-connection", "dependencies": { "timed-tape": "^0.1.1", "pull-defer": "^0.2.2" }, "devDependencies": { - "aegir": "^8.0.1" + "aegir": "^9.0.0" + }, + "engines": { + "node": ">=4.0.0" }, "contributors": [ "David Dias ", From c679610eec25e0b48eaf7df518537ee2b572009c Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 3 Nov 2016 08:56:37 +0100 Subject: [PATCH 155/337] chore(package): update peer-id to version 0.8.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 679bbc0..3be4feb 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "homepage": "https://github.com/diasdavid/interface-peer-routing", "devDependencies": {}, "dependencies": { - "peer-id": "^0.3.3", + "peer-id": "^0.8.0", "timed-tape": "^0.1.1" } } From 99a7163e47378711bebe3c2c088f96076aaf40d9 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 3 Nov 2016 08:27:30 +0000 Subject: [PATCH 156/337] chore: update contributors --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 6ee73d7..b061a1c 100644 --- a/package.json +++ b/package.json @@ -40,8 +40,9 @@ }, "contributors": [ "David Dias ", + "Friedel Ziegelmayer ", "Pau Ramon Revilla ", - "dignifiedquire ", + "Richard Littauer ", "greenkeeperio-bot " ] } \ No newline at end of file From 5a78c4d732f94a0b203c76d76f252d3059f51519 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 3 Nov 2016 08:27:30 +0000 Subject: [PATCH 157/337] chore: release version v0.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b061a1c..c75d5a9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-connection", - "version": "0.2.1", + "version": "0.3.0", "description": "A test suite and interface you can use to implement a connection interface.", "main": "src/index.js", "scripts": { From 3c872233280501c0d39692ad1321cc40f67cbf66 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 3 Nov 2016 09:33:26 +0100 Subject: [PATCH 158/337] chore(package): update libp2p-tcp to version 0.9.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2b79b5e..aafd2c3 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "chai": "^3.5.0", "chai-checkmark": "^1.0.1", "detect-node": "^2.0.3", - "libp2p-tcp": "^0.8.1", + "libp2p-tcp": "^0.9.1", "multiaddr": "^2.0.3", "pull-generate": "^2.2.0", "pull-pair": "^1.1.0", From 11980acc95462fa8c6b135a305c237d61da85a9b Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 3 Nov 2016 09:02:16 +0000 Subject: [PATCH 159/337] feat: move to next aegir --- .gitignore | 1 - .travis.yml | 29 +++++++++++++++++++++++++++-- package.json | 11 +++++------ 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 254988d..fb8d1c9 100644 --- a/.gitignore +++ b/.gitignore @@ -31,5 +31,4 @@ build # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git node_modules -lib dist diff --git a/.travis.yml b/.travis.yml index 52cd14d..610c492 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,35 @@ sudo: false language: node_js -node_js: - - "stable" +matrix: + include: + - node_js: 4 + env: CXX=g++-4.8 + - node_js: 6 + env: + - SAUCE=true + - CXX=g++-4.8 + - node_js: stable + env: CXX=g++-4.8 + +# Make sure we have new NPM. before_install: - npm install -g npm script: - npm run lint + +before_script: + - export DISPLAY=:99.0 + - sh -e /etc/init.d/xvfb start + +after_success: + - npm run coverage-publish + +addons: + firefox: 'latest' + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-4.8 diff --git a/package.json b/package.json index 2b79b5e..b5c1250 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,7 @@ "name": "interface-stream-muxer", "version": "0.4.0", "description": "A test suite and interface you can use to implement a stream muxer.", - "main": "lib/index.js", - "jsnext:main": "src/index.js", + "main": "src/index.js", "scripts": { "test": "exit(0)", "build": "aegir-build --env node", @@ -34,16 +33,16 @@ "chai": "^3.5.0", "chai-checkmark": "^1.0.1", "detect-node": "^2.0.3", - "libp2p-tcp": "^0.8.1", + "libp2p-tcp": "^0.9.1", "multiaddr": "^2.0.3", "pull-generate": "^2.2.0", "pull-pair": "^1.1.0", - "pull-stream": "^3.4.3", + "pull-stream": "^3.5.0", "run-parallel": "^1.1.6", "run-series": "^1.1.4" }, "devDependencies": { - "aegir": "^8.1.2" + "aegir": "^9.0.1" }, "contributors": [ "David Dias ", @@ -52,4 +51,4 @@ "Jeffrey Hulten ", "greenkeeperio-bot " ] -} \ No newline at end of file +} From 93bbda11d66c56352c3ee398f1c1fc41a3219a62 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 3 Nov 2016 09:02:55 +0000 Subject: [PATCH 160/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b5c1250..0aa8160 100644 --- a/package.json +++ b/package.json @@ -51,4 +51,4 @@ "Jeffrey Hulten ", "greenkeeperio-bot " ] -} +} \ No newline at end of file From 8fe87d0bb309e764b1dd9a5e7fb5e9c72b989b2d Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 3 Nov 2016 09:02:55 +0000 Subject: [PATCH 161/337] chore: release version v0.5.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0aa8160..37539d1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.4.0", + "version": "0.5.0", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "scripts": { From ae1698a3b90086718101cb78825be6c749e46ef5 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Fri, 4 Nov 2016 16:07:26 +0100 Subject: [PATCH 162/337] chore(package): update aegir to version 9.1.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 37539d1..5c6a2f0 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "run-series": "^1.1.4" }, "devDependencies": { - "aegir": "^9.0.1" + "aegir": "^9.1.1" }, "contributors": [ "David Dias ", From aa6fae9b75c9f05b5aca9c87485c38f1a11e2d97 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Fri, 4 Nov 2016 16:07:37 +0100 Subject: [PATCH 163/337] chore(package): update aegir to version 9.1.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0a2e0b2..a455a95 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/diasdavid/interface-transport", "devDependencies": { - "aegir": "^8.0.1" + "aegir": "^9.1.1" }, "dependencies": { "chai": "^3.5.0", From 839a8710898a0bc72d1adf7ef74cbcb46e7a7c1b Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 15 Nov 2016 14:23:25 +0100 Subject: [PATCH 164/337] chore(package): update aegir to version 9.1.2 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5c6a2f0..f9d33a1 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "run-series": "^1.1.4" }, "devDependencies": { - "aegir": "^9.1.1" + "aegir": "^9.1.2" }, "contributors": [ "David Dias ", From 998cc26725e59ed4b7d435cc2e835586b3677753 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 17 Nov 2016 20:00:34 +0100 Subject: [PATCH 165/337] chore(package): update multiaddr to version 2.1.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5c6a2f0..0e4e002 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "chai-checkmark": "^1.0.1", "detect-node": "^2.0.3", "libp2p-tcp": "^0.9.1", - "multiaddr": "^2.0.3", + "multiaddr": "^2.1.0", "pull-generate": "^2.2.0", "pull-pair": "^1.1.0", "pull-stream": "^3.5.0", From 8387525af5a357ef5b9015b7a9eb1d5644ae3efc Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Fri, 9 Dec 2016 13:25:02 +0100 Subject: [PATCH 166/337] chore(package): update aegir to version 9.2.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 515f190..ba66d44 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "run-series": "^1.1.4" }, "devDependencies": { - "aegir": "^9.1.2" + "aegir": "^9.2.1" }, "contributors": [ "David Dias ", From d7f31a18e2dedcd60462b422f7b33a842a7c00c0 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Fri, 9 Dec 2016 13:25:13 +0100 Subject: [PATCH 167/337] chore(package): update aegir to version 9.2.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a455a95..76e9214 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/diasdavid/interface-transport", "devDependencies": { - "aegir": "^9.1.1" + "aegir": "^9.2.1" }, "dependencies": { "chai": "^3.5.0", From 26eaf46ab967accd880c94cf03e55f5f62a6cfc6 Mon Sep 17 00:00:00 2001 From: Greenkeeper Date: Sat, 10 Dec 2016 21:04:02 +0100 Subject: [PATCH 168/337] chore(package): update aegir to version 9.2.1 (#22) https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c75d5a9..94e0075 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "pull-defer": "^0.2.2" }, "devDependencies": { - "aegir": "^9.0.0" + "aegir": "^9.2.1" }, "engines": { "node": ">=4.0.0" From ddd5c1908a16bc35ea9d4dcdf0f0f7a659874df8 Mon Sep 17 00:00:00 2001 From: David Dias Date: Sun, 11 Dec 2016 17:00:47 -0800 Subject: [PATCH 169/337] Initial commit --- .gitignore | 37 +++++++++++++++++++++++++++++++++++++ LICENSE | 21 +++++++++++++++++++++ README.md | 2 ++ 3 files changed, 60 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5148e52 --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7789aab --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 libp2p + +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/README.md b/README.md new file mode 100644 index 0000000..61acb44 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# interface-peer-discovery +A test suite and interface you can use to implement a peer-discovery. From d193989742e01fe109cdc47273cd1b60be6466ea Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 13 Dec 2016 13:02:12 +0100 Subject: [PATCH 170/337] chore(package): update aegir to version 9.3.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ba66d44..3bf771f 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "run-series": "^1.1.4" }, "devDependencies": { - "aegir": "^9.2.1" + "aegir": "^9.3.0" }, "contributors": [ "David Dias ", From 4bfd1595defcb7b73af67d0a1a949aa455c5bec7 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Sun, 18 Dec 2016 09:10:43 +0100 Subject: [PATCH 171/337] chore(package): update peer-id to version 0.8.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3be4feb..27473cb 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "homepage": "https://github.com/diasdavid/interface-peer-routing", "devDependencies": {}, "dependencies": { - "peer-id": "^0.8.0", + "peer-id": "^0.8.1", "timed-tape": "^0.1.1" } } From 23a75d192e04da7300cd3865aedc1ba94c712790 Mon Sep 17 00:00:00 2001 From: Friedel Ziegelmayer Date: Wed, 11 Jan 2017 21:57:37 +0100 Subject: [PATCH 172/337] fix: some fixes for incorrect tests found these when debugging pull-multiplex --- package.json | 8 +++----- src/base-test.js | 13 +++++++------ src/close-test.js | 4 ++-- src/spawner.js | 5 ++++- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 3bf771f..b0d0f40 100644 --- a/package.json +++ b/package.json @@ -37,10 +37,8 @@ "multiaddr": "^2.1.0", "pull-generate": "^2.2.0", "pull-pair": "^1.1.0", - "pull-stream": "^3.5.0", - "run-parallel": "^1.1.6", - "run-series": "^1.1.4" - }, + "pull-stream": "^3.5.0" + }, "devDependencies": { "aegir": "^9.3.0" }, @@ -51,4 +49,4 @@ "Jeffrey Hulten ", "greenkeeperio-bot " ] -} \ No newline at end of file +} diff --git a/src/base-test.js b/src/base-test.js index 8fa3a4c..097b877 100644 --- a/src/base-test.js +++ b/src/base-test.js @@ -107,11 +107,6 @@ module.exports = (common) => { expect(err).to.not.exist.mark() }) - pull( - pull.values(['hey']), - dialerConn - ) - listener.on('stream', (stream) => { pull( stream, @@ -125,12 +120,13 @@ module.exports = (common) => { expect(err).to.not.exist.mark() }) + dialer.on('stream', onDialerStream) + pull( pull.values(['hello']), listenerConn ) - dialer.on('stream', onDialerStream) function onDialerStream (stream) { pull( stream, @@ -141,6 +137,11 @@ module.exports = (common) => { ) } }) + + pull( + pull.values(['hey']), + dialerConn + ) }) }) } diff --git a/src/close-test.js b/src/close-test.js index 601ee99..3c1161d 100644 --- a/src/close-test.js +++ b/src/close-test.js @@ -7,8 +7,8 @@ chai.use(require('chai-checkmark')) const expect = chai.expect const pair = require('pull-pair/duplex') const pull = require('pull-stream') -const parallel = require('run-parallel') -const series = require('run-series') +const parallel = require('async/parallel') +const series = require('async/series') const Tcp = require('libp2p-tcp') const multiaddr = require('multiaddr') diff --git a/src/spawner.js b/src/spawner.js index c6bbdc5..293111c 100644 --- a/src/spawner.js +++ b/src/spawner.js @@ -7,6 +7,7 @@ const pull = require('pull-stream') const generate = require('pull-generate') const each = require('async/each') const eachLimit = require('async/eachLimit') +const setImmediate = require('async/setImmediate') module.exports = (muxer, nStreams, nMsg, done, limit) => { const p = pair() @@ -50,7 +51,9 @@ module.exports = (muxer, nStreams, nMsg, done, limit) => { check() pull( generate(0, (s, cb) => { - cb(s === nMsg ? true : null, msg, s + 1) + setImmediate(() => { + cb(s === nMsg ? true : null, msg, s + 1) + }) }), stream, pull.collect((err, res) => { From 03e5de22612bbe1db74fc18a35f47e5bee5d5a3b Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 16 Jan 2017 15:17:04 +0000 Subject: [PATCH 173/337] chore: update deps --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b0d0f40..7b5570e 100644 --- a/package.json +++ b/package.json @@ -29,12 +29,12 @@ }, "homepage": "https://github.com/libp2p/interface-stream-muxer", "dependencies": { - "async": "^2.1.2", + "async": "^2.1.4", "chai": "^3.5.0", "chai-checkmark": "^1.0.1", "detect-node": "^2.0.3", "libp2p-tcp": "^0.9.1", - "multiaddr": "^2.1.0", + "multiaddr": "^2.1.3", "pull-generate": "^2.2.0", "pull-pair": "^1.1.0", "pull-stream": "^3.5.0" From e4de266b7661abb838fc6cb90d9f1732a896b37e Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 16 Jan 2017 15:18:12 +0000 Subject: [PATCH 174/337] chore: update contributors --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 7b5570e..e070146 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "pull-generate": "^2.2.0", "pull-pair": "^1.1.0", "pull-stream": "^3.5.0" - }, + }, "devDependencies": { "aegir": "^9.3.0" }, @@ -49,4 +49,4 @@ "Jeffrey Hulten ", "greenkeeperio-bot " ] -} +} \ No newline at end of file From 148fcde17ed94983d3f5548f39ea1cf49a4f9018 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 16 Jan 2017 15:18:12 +0000 Subject: [PATCH 175/337] chore: release version v0.5.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e070146..53e7a6c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.5.0", + "version": "0.5.1", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "scripts": { From 127be58017159c1d4f96b97175ae0564340ce4bf Mon Sep 17 00:00:00 2001 From: Victor Bjelkholm Date: Thu, 19 Jan 2017 14:07:37 +0100 Subject: [PATCH 176/337] Refactor of test-case --- src/close-test.js | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/close-test.js b/src/close-test.js index 3c1161d..fab1114 100644 --- a/src/close-test.js +++ b/src/close-test.js @@ -14,13 +14,11 @@ const multiaddr = require('multiaddr') const mh = multiaddr('/ip4/127.0.0.1/tcp/10000') -function closeAndWait (stream) { +function closeAndWait (stream, callback) { pull( pull.empty(), stream, - pull.onEnd((err) => { - expect(err).to.not.exist.mark() - }) + pull.onEnd(() => callback()) ) } @@ -36,38 +34,37 @@ module.exports = (common) => { }) }) - it('closing underlying closes streams (tcp)', (done) => { + it('closing underlying socket closes streams (tcp)', (done) => { expect(2).checks(done) const tcp = new Tcp() - const tcpListener = tcp.createListener((socket) => { - const listener = muxer.listener(socket) + const tcpListener = tcp.createListener((conn) => { + const listener = muxer.listener(conn) listener.on('stream', (stream) => { pull(stream, stream) }) }) tcpListener.listen(mh, () => { - const dialer = muxer.dialer(tcp.dial(mh, () => { - tcpListener.close() - })) + const dialerConn = tcp.dial(mh, tcpListener.close) - const s1 = dialer.newStream(() => { + const dialerMuxer = muxer.dialer(dialerConn) + const s1 = dialerMuxer.newStream(() => { pull( s1, pull.onEnd((err) => { expect(err).to.exist.mark() }) ) + }) - const s2 = dialer.newStream(() => { - pull( - s2, - pull.onEnd((err) => { - expect(err).to.exist.mark() - }) - ) - }) + const s2 = dialerMuxer.newStream(() => { + pull( + s2, + pull.onEnd((err) => { + expect(err).to.exist.mark() + }) + ) }) }) }) @@ -91,8 +88,10 @@ module.exports = (common) => { } conns.forEach((conn, i) => { - if (i === 2) { - closeAndWait(conn) + if (i === 1) { + closeAndWait(conn, (err) => { + expect(err).to.not.exist.mark() + }) } else { pull( conn, From ab67cdd9cd6cd26fb88d29f5dc241c7c0f1efa5f Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 19 Jan 2017 13:19:22 +0000 Subject: [PATCH 177/337] chore: update deps --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 53e7a6c..dcdef62 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "pull-stream": "^3.5.0" }, "devDependencies": { - "aegir": "^9.3.0" + "aegir": "^9.3.1" }, "contributors": [ "David Dias ", From 89da3d78f3e6f629e590a5fb9ceec39c0abac137 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 19 Jan 2017 13:21:21 +0000 Subject: [PATCH 178/337] chore: update contributors --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index dcdef62..d726dd3 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "David Dias ", "Friedel Ziegelmayer ", "Jeffrey Hulten ", + "Victor Bjelkholm ", "greenkeeperio-bot " ] } \ No newline at end of file From 37e549e3f908cfdd50d2e81664a206d6e5de2864 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 19 Jan 2017 13:21:21 +0000 Subject: [PATCH 179/337] chore: release version v0.5.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d726dd3..fe11e57 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.5.1", + "version": "0.5.2", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "scripts": { From 466c161cd4e042f8944d3aee0e046d3f3755741e Mon Sep 17 00:00:00 2001 From: Victor Bjelkholm Date: Thu, 19 Jan 2017 15:17:53 +0100 Subject: [PATCH 180/337] Pass error --- src/close-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/close-test.js b/src/close-test.js index fab1114..a8747c5 100644 --- a/src/close-test.js +++ b/src/close-test.js @@ -18,7 +18,7 @@ function closeAndWait (stream, callback) { pull( pull.empty(), stream, - pull.onEnd(() => callback()) + pull.onEnd(callback) ) } From 74a032a84a1927cb7dadd3d5c334dd2c19c66029 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 19 Jan 2017 15:01:30 +0000 Subject: [PATCH 182/337] chore: release version v0.5.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fe11e57..46be1a9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.5.2", + "version": "0.5.3", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "scripts": { From 6695b8061a9d31486831c55253f2d3e01c168b89 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 20 Jan 2017 11:57:57 +0000 Subject: [PATCH 183/337] fix: avoid making webpacky funky by not trying to inject tcp --- package.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 46be1a9..c4b8795 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,9 @@ "version": "0.5.3", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", + "browser": { + "libp2p-tcp": false + }, "scripts": { "test": "exit(0)", "build": "aegir-build --env node", @@ -50,4 +53,4 @@ "Victor Bjelkholm ", "greenkeeperio-bot " ] -} \ No newline at end of file +} From 3697ac6d7286f90e29d02a9acc086fc81874f81e Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 20 Jan 2017 12:00:00 +0000 Subject: [PATCH 184/337] chore: update contributors --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c4b8795..d1bf28d 100644 --- a/package.json +++ b/package.json @@ -53,4 +53,4 @@ "Victor Bjelkholm ", "greenkeeperio-bot " ] -} +} \ No newline at end of file From 4160c6a3f342e2948f52c92b449d67feb6d40235 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 20 Jan 2017 12:00:00 +0000 Subject: [PATCH 185/337] chore: release version v0.5.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d1bf28d..76d6ac4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.5.3", + "version": "0.5.4", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "browser": { From 1635977484f13fc0576cd26784cbfa97694ebea5 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 24 Jan 2017 09:25:24 +0000 Subject: [PATCH 186/337] fix: when things are in the same process, there is a order to them :) --- src/base-test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/base-test.js b/src/base-test.js index 097b877..e0fa8ec 100644 --- a/src/base-test.js +++ b/src/base-test.js @@ -116,12 +116,12 @@ module.exports = (common) => { }) ) + dialer.on('stream', onDialerStream) + const listenerConn = listener.newStream((err) => { expect(err).to.not.exist.mark() }) - dialer.on('stream', onDialerStream) - pull( pull.values(['hello']), listenerConn From 8f9d6a8a3f51dbfe611561dec682c521cfb8704b Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 24 Jan 2017 09:29:10 +0000 Subject: [PATCH 188/337] chore: release version v0.5.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 76d6ac4..a0211fd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "interface-stream-muxer", - "version": "0.5.4", + "version": "0.5.5", "description": "A test suite and interface you can use to implement a stream muxer.", "main": "src/index.js", "browser": { From bc27eb99b77c3a63dda14efaf5056a096f1c560e Mon Sep 17 00:00:00 2001 From: David Dias Date: Sat, 28 Jan 2017 20:28:37 +0000 Subject: [PATCH 189/337] docs: Initial spec --- .travis.yml | 38 +++++++++++++++++++++++ README.md | 77 +++++++++++++++++++++++++++++++++++++++++++++-- circle.yml | 12 ++++++++ img/badge.png | Bin 0 -> 6165 bytes img/badge.sketch | Bin 0 -> 106496 bytes img/badge.svg | 39 ++++++++++++++++++++++++ package.json | 42 ++++++++++++++++++++++++++ test/index.js | 1 + 8 files changed, 207 insertions(+), 2 deletions(-) create mode 100644 .travis.yml create mode 100644 circle.yml create mode 100644 img/badge.png create mode 100644 img/badge.sketch create mode 100644 img/badge.svg create mode 100644 package.json create mode 100644 test/index.js diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..9d678dd --- /dev/null +++ b/.travis.yml @@ -0,0 +1,38 @@ +sudo: false +language: node_js + +matrix: + include: + - node_js: 4 + env: CXX=g++-4.8 + - node_js: 6 + env: + - SAUCE=true + - CXX=g++-4.8 + - node_js: stable + env: CXX=g++-4.8 + +# Make sure we have new NPM. +before_install: + - npm install -g npm + +script: + - npm run lint + - npm test + - npm run coverage + - make test + +before_script: + - export DISPLAY=:99.0 + - sh -e /etc/init.d/xvfb start + +after_success: + - npm run coverage-publish + +addons: + firefox: 'latest' + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-4.8 diff --git a/README.md b/README.md index 61acb44..4541803 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,75 @@ -# interface-peer-discovery -A test suite and interface you can use to implement a peer-discovery. +interface-peer-discovery +======================== + +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) +[![](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io/) +[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) +[![Travis CI](https://travis-ci.org/ipfs/interface-peer-discovery.svg?branch=master)](https://travis-ci.org/ipfs/interface-peer-discovery) +[![Dependency Status](https://david-dm.org/ipfs/interface-peer-discovery.svg?style=flat-square)](https://david-dm.org/ipfs/interface-peer-discovery) +[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) + +> A test suite and interface you can use to implement a peer discovery mechanism. + +The primary goal of this module is to enable developers to pick and swap their stream muxing module as they see fit for their application, without having to go through shims or compatibility issues. This module and test suite was heavily inspired by [abstract-blob-store](https://github.com/maxogden/abstract-blob-store). + +Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. + +The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. + +## Modules that implement the interface + +- [JavaScript libp2p-mdns](https://github.com/libp2p/js-libp2p-mdns) +- [JavaScript libp2p-railing](https://github.com/libp2p/js-libp2p-railing) + +Send a PR to add a new one if you happen to find or write one. + +## Badge + +Include this badge in your readme if you make a new module that uses interface-peer-discovery API. + +![](/img/badge.png) + +## Usage + +### Node.js + +Install `interface-peer-discovery` as one of the dependencies of your project and as a test file. Then, using `mocha` (for JavaScript) or a test runner with compatible API, do: + +```js +const test = require('interface-peer-discovery') + +const common = { + setup (cb) { + cb(null, yourMuxer) + }, + teardown (cb) { + cb() + } +} + +// use all of the test suits +test(common) +``` + +### Go + +> WIP + +## API + +A valid (read: that follows this abstraction) stream muxer, must implement the following API. + +### `start` the service + +- `JavaScript` discovery.start(callback) +- `Go` NA + +### `stop` the service + +- `JavaScript` discovery.stop(callback) +- `Go` NA + +### discoverying peers + +- `JavaScript` discovery.on('peer', function (peerInfo) {}) +- `Go` NA diff --git a/circle.yml b/circle.yml new file mode 100644 index 0000000..434211a --- /dev/null +++ b/circle.yml @@ -0,0 +1,12 @@ +machine: + node: + version: stable + +dependencies: + pre: + - google-chrome --version + - wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - + - sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' + - sudo apt-get update + - sudo apt-get --only-upgrade install google-chrome-stable + - google-chrome --version diff --git a/img/badge.png b/img/badge.png new file mode 100644 index 0000000000000000000000000000000000000000..785abc493c3b0906e47b1690ffcdcadd588fa96e GIT binary patch literal 6165 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 literal 0 HcmV?d00001 diff --git a/img/badge.sketch b/img/badge.sketch new file mode 100644 index 0000000000000000000000000000000000000000..51a982d06d62a16903e4e3c4283af1479bfb8438 GIT binary patch literal 106496 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