From 608345dc10d2c8e1f82e3db76403f6c03ccbad52 Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Sat, 6 Jan 2018 23:22:54 +0800 Subject: [PATCH] initial commit --- .babelrc | 17 + .eslintrc.json | 26 + .gitignore | 4 + package.json | 41 + src/assets/font/octicons.woff2 | Bin 0 -> 20540 bytes src/components/FileExplorer.js | 192 ++ src/components/GitakoSideBar.js | 135 ++ src/components/Icon.js | 46 + src/components/Logo.js | 14 + src/components/MetaBar.js | 18 + src/components/Node.js | 42 + src/components/SearchBar.js | 17 + src/components/SettingsBar.js | 102 + src/content.js | 10 + src/content.less | 258 ++ src/manifest.json | 15 + src/octicons.css | 537 ++++ src/utils/DOMHelper.js | 290 +++ src/utils/GitHubHelper.js | 33 + src/utils/cx.js | 12 + src/utils/storageHelper.js | 25 + src/utils/treeParser.js | 72 + src/utils/urlHelper.js | 39 + src/utils/visibleNodesGenerator.js | 124 + webpack.config.js | 67 + yarn.lock | 3626 ++++++++++++++++++++++++++++ 26 files changed, 5762 insertions(+) create mode 100644 .babelrc create mode 100644 .eslintrc.json create mode 100644 .gitignore create mode 100644 package.json create mode 100755 src/assets/font/octicons.woff2 create mode 100644 src/components/FileExplorer.js create mode 100644 src/components/GitakoSideBar.js create mode 100644 src/components/Icon.js create mode 100644 src/components/Logo.js create mode 100644 src/components/MetaBar.js create mode 100644 src/components/Node.js create mode 100644 src/components/SearchBar.js create mode 100644 src/components/SettingsBar.js create mode 100644 src/content.js create mode 100644 src/content.less create mode 100644 src/manifest.json create mode 100755 src/octicons.css create mode 100644 src/utils/DOMHelper.js create mode 100644 src/utils/GitHubHelper.js create mode 100644 src/utils/cx.js create mode 100644 src/utils/storageHelper.js create mode 100644 src/utils/treeParser.js create mode 100644 src/utils/urlHelper.js create mode 100644 src/utils/visibleNodesGenerator.js create mode 100644 webpack.config.js create mode 100644 yarn.lock diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..b16cc73 --- /dev/null +++ b/.babelrc @@ -0,0 +1,17 @@ +{ + "presets": [ + [ + "babel-preset-env", + { + "targets": { + "chrome": "60" + } + } + ], + "react" + ], + "plugins": [ + "transform-class-properties", + ["transform-object-rest-spread", { "useBuiltIns": true }] + ] +} \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..bd858cc --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,26 @@ +{ + "env": { + "browser": true, + "commonjs": true, + "es6": true, + "node": true + }, + "parserOptions": { + "ecmaFeatures": { + "jsx": true + }, + "sourceType": "module" + }, + "rules": { + "no-const-assign": "warn", + "no-this-before-super": "warn", + "no-undef": "warn", + "no-unreachable": "warn", + "no-unused-vars": "warn", + "constructor-super": "warn", + "valid-typeof": "warn" + }, + "plugins": [ + "class-property" + ] +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8649625 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.vscode +node_modules +tmp +dist diff --git a/package.json b/package.json new file mode 100644 index 0000000..944280c --- /dev/null +++ b/package.json @@ -0,0 +1,41 @@ +{ + "name": "gitako", + "version": "0.1.0", + "description": "yet another extension for GitHub", + "repository": "https://github.com/EnixCoda/Gitako", + "author": "EnixCoda", + "license": "MIT", + "private": true, + "scripts": { + "start": "webpack --watch", + "dev": "webpack", + "prod": "NODE_ENV=production webpack && cd dist && rm ./gitako.zip && zip gitako.zip *" + }, + "dependencies": { + "pjax": "^0.2.4", + "preact": "^8.2.6" + }, + "devDependencies": { + "babel-loader": "^7.1.2", + "babel-plugin-react-require": "^3.0.0", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-object-rest-spread": "^6.26.0", + "babel-preset-env": "^1.6.1", + "babel-preset-react": "^6.24.1", + "copy-webpack-plugin": "^4.2.0", + "css-loader": "^0.28.7", + "file-loader": "^1.1.5", + "less": "^2.7.3", + "less-loader": "^4.0.5", + "style-loader": "^0.19.0", + "uglifyjs-webpack-plugin": "^1.1.1", + "url-loader": "^0.6.2", + "webpack": "^3.8.1" + }, + "prettier": { + "printWidth": 100, + "singleQuote": true, + "semi": false, + "trailingComma": "es5" + } +} diff --git a/src/assets/font/octicons.woff2 b/src/assets/font/octicons.woff2 new file mode 100755 index 0000000000000000000000000000000000000000..d18281265fd35e52cc164a443dc4719f682ac279 GIT binary patch literal 20540 zcmV)6K*+y$Pew8T0RR9108l&t4*&oF0IhTY08iTh0RR9100000000000000000000 z0000#Mn+Uk90p(jg$f8H37QrW2nvFp9D)8F0X7081A<@+f?5CsAO(XA2ah`pfejlH zn>S=`&gh47+W_X>i|I|ek%3_200i0Jcc!YUnvk4~AxsZwS>^v$398l05JfaJNK-h{ zdN!%|5ibbQXU_WKS)U#52{%|(#8HFA!lPNJ7F~;j=W=l^*!*Aw(Ht;z8^>wI_e&DC z1AmQ6q|0{}F^ZmO|JU|T5kYp#$AONz&a@SC&*2CMkIIeFKgC;NAiJ; zGA_Eco?7+)>zCTQ+xxZ!0#i=ZYO>Q~OWd+MGYUHnD}T4G+E#7J5F*(F#M^-U_e-nZ zbKUddY15UN9$VwTH<`&VPRdca;*?xe$P!$%c7YJkS%5ZcVK0xpd_UXs%S|%L*vhOv z`=SDDO~s*Us460W0MKck0yYaxu}qxgi=+a8rUK!(bbi>n(y$fM<%Vevc<_Npu-ZZY zdD3Y=^~{WPk!GGGcvxnvGGHvXu>=Aekys!s*;%p{LdJw(cTy^8n6#?2LgKm!Nhj4N zq$#~RTN=L>wpGIXo6c(g3}!>b7j;>i*^6B2Lu{|RcU8sze`e61KLeVPgc%91EeX7q zfL&$=VMYQI%=!t3yfL%cm$F7A1>1`x@ET#S)20g{crT_Zq@ul|+v`%(__@0Bn&yh; zz@dt`IUYmWX$Jn>7ZaKdl^421x(FB&ny{sR?cV*2&3@%YJ8xrat5B!V5Aeq^wrUH# zN-ss|OJ?yX-qm(IEXiTEg8|M1l)-JOX`eH`Qnr@6=#ZgM+!b3c#qG|%!XZ}L80ew02H|Nk!t zO%@_hfih}SpGGvJGd<|5*e5cbIV@r|>)5O?9p~@m0EapD)Mc(OJj#{pHF_(mE6C(z68_>he&Hv6;5)wJ6F!1?hc|eImw1M!c!I}xgok*5`?!UhxQ;8h zh;ulJ<2Z&RIE+I$hx#{Tg zfxUQ6CViB$}oNI`d)yir3?~&`_-c`h?1BIFw7nkFb9HEgycaa zJh|=iA%nMzhJoNov_OcyK1-Fmo9EjEM)o}rrmv6F>(dm)N&AXu^$4vHw9j3^&j=19 zL36npVANRs4ikug0+9&*qf{ja1y$lOwWv+4;O!CNCb=S19=-=CL9!5J#XDJL3^7i_ z8NCb@AWG(-4a|-xo~AiP>6Hh-^v@DO61BibB3=RxqDtF`;#W9~z{6r31~uX|`NVW` z4#a4Ms2PaUiaron228LlNU$83WE~*MIzftcfi&v|8P;<_zOfF@yu?GX0sc8j4ejlR&AFR+_+&_4na=>< zpC`cX?*|&R_0xf7xgcn7%I0X%%7CD%)e0c*gx$-=PnT_Fz0$h(3b+*%)I^NO3V}8S zgmH*OIQ0XU`HA4Mr@O&2sTdd=@uouOXAb-WFG9zAoVdq9}m2;Y(B#|uZ`$b z6~;C?+nCw`{53BL+3Cpb<)kjR)w&up19Js$e&Tl4K3{LxmGAaKL)&c4ezBor4x&0Z z5_>efaymG>#Zsx=U$iWR=|FQb*3_xB`we#QHPy|jvDE6C!T%7eC5r?=+mq7SC!m3g z!{;-9pnn0h%^@I5Ol!yVX7NJQ^_W?f;%~P)!aDw-L@nxtz)F^NwW)xy=(uqUt~Ing zaec`2eN(IDzyoin8_oPxSU=lrHX}f98W3zNU=eInOpqO5fZc@veX<7@!9GQh17PS6 z=`R3aK_^FH1%hJ_AczAXfZ;-bCFX`j za7!^k?tno@JTZ$E_b8+f0f9aY1o{XN=%YZOj{$)`4up%JpcT5KN1tSr@$7EFQ_Ni3 z(-aWE%(p&6D;7)75`>E9DiJ)t2&NjOFEAL=ixGnK6404>na`D8Aqdi|Kme~Tg6XE{ z>kNkUMuZ@}2?XXXK3961AV}{30ld2iW}2e!F&NVO5rXsq5SS17TE>S(qq`OT1h!PW%I5g&mO1lsiF7QyO z%fyI*z&70^H3uDD$0>p8VhBvjuO;2O*OkCK+*D>Y@BeNaUg6`bps9xu3OHMNnEaZ>M~`n z!x@qcjM0n2X8nlknR{``i~E^#EHW)Q9}igR@b5Qm0B;i5nFTGI0e-PGwE{q;jaawd z=%|6OfDqzv6`@Dq2B=XbfHA<4!3`hi^3fLaJ{BZzQ29kOow>!1d?mgObP0vGC0U;xoG8YN{ zNypkRjj`31D?s!*3D^-L(fkxmQp|*0U^Z!GWfV@=$9Ahzzqmj0)YYZu#6V*Tt-}@J zxL-{DsM9Y@PlGrIUg{fomb6`6ZhkUPb&(4;RF-gu8A+yB(*?NTHCkrK!EAYfpQKRP zR`8-qFlF-CHN>vjR*Amr>u>aY`}##b&(YsELbQ#&{mUKEHKroLR(p0)G@|={q9x4< zg%F+=`l19CNM2{I7Vp6d_ihP!1`j#+1i4KIW)d5oj z!P6{H4M0JjEGoEpIwarT>AON4Y1>3BzHA3n^v)|r1u8oPYGms|mYO`Gu`3CrakX{U zYuyFN z)X7Yt^DL>h97&8CJZVAIRilpe_gSq=&ZiXal$!I~gzgG)AOwZD2bE)}OoVt{i2ce~ zgUVG2lsGXv^2$!$$VLaUp`s?DszOJDLhQkMYK`;GS>wx>#%qc|Ca>TyeWKwEGs>cb z$7|*2DWQ|*c$&26`o#6wot&!hAbFGXbw7Qcm7wfEg&)b*Cx+meqr{Ohu!cpX`>wIO zI^SIMk;%G_VhVfL=GqN_p4k-^nqsGndKZ{6+bSWV8Lx*Y`>J)gUCpGpI}M0kHDAB| zy3@!c5;j#h48kDSLd4{CGd_?QfwH`(G3yX1#MKv{kI-y90{ zSU}lI&oQHsuDRnintz=_<^b{+dIYcMz~oYMlG)SsIi}jG{f~S>{zl3gs>tynqF0p1|}FL>)TtKvvFg6tQsevEW)$s^G~=4 z#TZ7_3`~_fcGlD|3=C&=@I!v+xuD%9C_^1b~gr_HNVvO^C?pCtcdxDou_uEUCkzCYjSwbfh_)==* zXq$#}?Y?(k?L2&WYUtiPM81;$B#e(K`5d)-6)vPanq+xPj)Of+xwxJsF^kZ*zNL{& zF$I^dsDD-Xj6D_=%1&X5n&mlFT1+fyTqJ0YOT-P$@i6N_PdFQEfy0JE7>BCM;HGlG zcyxRo#M7Z~b4(HHU_S~`N29_7@1m;Esz21?*@dL`h)DMB4kt5jS7LIvF!1PD<`bP6 zw};6op(8bHNI>*{qmD;eA4^-`8Rd9wK0B)>!(=+#pb&ihkWj4j`ZEe0M1^uZ#BQgx zkZvNOxV(S!S?j8EHwc$DZD`(rIMH@==pw;v8wCwe7q_2xrmi)nGf)*BKu0Hc=K8(WjFY?g)rrTpKqo4=qAH3x zgS1Gn0)oVfbrI;}u!S!XAE&P*jN}V2Ub>4ap)ff^@!Jd?Ryoq$&oSMl5Zs)ibzYb$ zTr@nOYfK%`AY)5Ny+tSHi%)J+4>`V^;2Bt{6plcl*R7;?HB;o}8AaJ1#EcknwT88& ze8tpaoa_C`#}Z-LA3};P*=$CkMU>K;X9GpW-`(f57^I#{`+{;DW6unKqXR<87!NEl zNBK|X2Mz+&Oj{j#72+AJ%1Xj&dcrXX%3x-`TU-B<))Y*!qO5Fk4PYdvE!9V3oe134 zletO*lB$U?IwG<8L%oY3R%Y?hOOa4jTXi9c;lWKLIxt1m95xVnhvp?y9HtXDpKaU8 z)Xbom<11tSobT)j;ulPxN%%`hv8QWRT@*WoFZpy6RlZz#Bwu8$yi+OC6$Y?^=>93H zCFMjWSA}v}CA!Bz+G4Gs3ZFG5TuneI210KXI??WvYX+9WSD3$K z2|Cs_W6Blf=?fJ!M-Fkgsmbx;Arhjw6t(v+eLq7nsX%f?y{bYP$@W6Fu%bcH=Si4N z5cQ~2H}5=IYl`brtOFj!^s1QF4ue&-WmY| zXMD|HK0-VoRCtB=1hdJTpO{JLd(%N_NKessRotu7f${m5@VwU}&_W$l39qJR*1Oi} z++J|CxRkhu(5~7$`3a&sse=mLc$+;qBW>F1$hZ>K4R_YsGZ)zPDDr z3QZNsB4fKHDl~3v$(5n0PhDgODJ? zO)ZCXAhA)35YGlt_+7~=$7x+TsDglwh0h?S#4c3hEeY>S6?z4ysK>Vnh`#0pMB-VA zFnv*;j{q@?$ioyeLvCRm+_0{T=({@x<#N)Hj84bEU{J(}X-2ffwzm(zbb!3q=W`n0 z!9jGBs<|(;SoC?&xUEC1`W3fS_(?vGlgnmthdK&3n zSnT+c9d6#vR7~t@X=d9O#Z&W{q$0iR#X%p6Yo^%1LPpic<79!}RDEZ8aj|=6kgd1* zTzZTR@wYjqL2beu1$yZGiCTXCtG8eB|; z2PJpsnHmh6DeyUn2_@JXP-BDIpjE7%Hs(-m)reI>K#?l-*kVdhE2^*?rMU#3YwU8x zN2tv%T4`c}%_eGgtqLX-dz;MGi(p)j&d*F3{>6K@hRO!XdlD1P+ys~$kC8`u8n0_b zb4P5FR1~kPw`C*yP0BMq9sNPpy^;$uyNUY^d)OE3`TaK;F?95f-!}u>9^0*#(WZ`QRpD}u4HIyJ>=_$KXNw$XDlG8wP?G*?SIzd4 zt6kxx@B~}0l>Oim@vazA4YfC!0dp!{@RCnLy7BL2pd=?jC1lw#5GDRT`<6`0!gQel z^#Lh%>S(@HqY_Fnk5@6}?uZ`P_VAJK-S@YZsyWIg)Z`mDL{${S9$!Y1b4h}NVprc) zp`t&DIs7K1_&$|(sxi*BYVMAJeVnK|T4vz}h9)$JC9;nBI?slycD`2wcN4c|MnjZU z5Yad4hfC9stcbR+Q_SDTm29dZN|ty00As*Fu18B4(s5Pz+?wjfnqG|^tnrYkNHrzV zYDSiTOE8+c1hiCr=d|%OKM)zB1d>+879|Xl)= zvU`P}1H@S+Q}YWDx8oh^1}GyHI>Sw5=!^y-eBbQd`nUHv zu`2J6d3!j|!=7mpgPXb$JxAer>3|F>Qn7gIwaAF1tnY1x4X$lHbZch}xY>;~dikm@ z^csg)ppnT5kd8Mi@m+7{_GIb`AaI})6O2g#gpMvb7xB{GclhXiM)W_a&DI9{>dH-= zF=qVV_Ac<;sdz%Do8})l?#bhGWO_esG;_5!B%l0ADH>Gs=5P>aFK05PtgC4BvBO3n z=FVN@kdUDuW@;V1U|8z%63wu#c^H4h;s=HUEwAV6yVyFGI3a(FrnhZ;?9okax^|19 z_vAz|*Q1ADE!XpXRF?44;z&RroK#^$ogCC_&MLrj$t6DTyaxpqxD0~GL;;rt;&ymZ z@(KV%D~C=f7c4eaDnvjO$w19!^yLh8A?@RHOT3qp*5|dneHtBm=+&y;r~QWy#oFkQ z273O1x-5WVkkwJbrW4g^1TqNi%nY13ctqs7-Z(k-`)B1X0P}EgkdR&mCh`GXd)fdN zT0i z$z53yH@!~pJZWhCvGac|%MW4H>ep&&JAEPF53zVK>+fxrCMhL>EQ_E`X&)M`?`wU{ z(HJSp$tfg5KgMT;OU>1w=Ys#cSC$1sL9AG-FLSqJdGI5d+$3+oC^ z7wyrgDTyp-EnTWAsw@eDxI$<$rC5Aejas>X6`17aK(1M@6lF6KYTK)93gT@-z2%oo zNtPt2bv>~N=bDmvbmhieDpg(W7la=bx_d8nS6gC=-{bKsdx>aiZwKH~w`$|3BpaQt zg4;kk@e6Rw1H>Ng<_XFWJ^mnIhnGqKBOB=C4hO*@2eidE<-1pMbr(KQF*`8YRoUlnu~hct64@hdjGRr%PB#* zu}?192g&xmIljh4OhbNS?aTP7ZBhBek3Kq4jvi{-l5Ptl+?G!2(CclkFj?8Qp2aEu z$;)GvEPu4go+hGA^JLRo!Ee_g4?pl$(5hIntjn@5<+Bb~>h5)SJwQZn)f}@>36?LN zyM-DO6{|YE75uV%*z$FdZ>QJl($JA3L#6jV`2?lj$qO&dh3GKNe5+e<8CAR5i0FK5 ziA4N>EXDTilS!M>*jh|e-rlmQInNrEKBbYJ!X-`06VXvlJTok(Qle^&-0$`0Z2JZL z-ZO6G3%?o3k}bX%+BEWLvBT3*d~{?}XxcMCca{5cO-gS&v4I9^PX_cb99JmuaxzLA~IK>6^!vKYeU@_1LeM$Ap8q z_{iWuOfT!~w3%nh2OB@OuIM|Md&bT;5VswpDGoC@^GB7O6qzFfb1zG8-EcyxFVYxq z$ypyWi&f2QBjvKNqk1dqh>*L#OOhrCTB)u9`&($)GpLAf6foGsB?yc z{|q+nwh18e82n(g%U+P2l!Q%IMw}R6gJsg0As1IbA25K0<%c2(tRx@K!M>SB%`?l< zPL0l}Ost*C<_`o()8x~X|M86YZ<66|sG&ZnDvq zYX$}zNN+MRKxYz?F{sI8FnAB1Dyp%VCb3-5ic5+m$f8`j$5N!Y6%3SQ#ouLf`$Dp5 z+GoDCys!g1PC@_0`(No5l%dNgLEn$(3n}CqGRRz^rL=*5$NY(*zXXmAzhlG!o5uNV zcCEduXA|rf3kzfJl_OTdY8nP;yc*aj@;{I55P$(NfP*{6=j?Ms7HPonE_k&M&(@3q zl6HnK*AlhnSmY(MHlbY}4jgDYu<%Gv@2tnOX4xDmO<$%ma-w`s>L=K<{SAZYo%)Th zuFjW&MJrrBSOOecYEHb0!E}eYrzCLWnRJF3ON$c-!=%dji+-_|KwHBS*pRXsuOdCq z0m~_*^}(qW+%X%stNJa`KW1TMSKr~h&47`|?KaMmZST{dqT>{a<@W`O{%Xdf;I z-~@z;0gO9jRQ}mXJJE`9Sv<%7c|%~u*&ep8c2OBk*56zgTZ7pNLpvS7fgvYwfK~nT zwfp_3P`+KKY_OtIMv7YhW&&bkBc=tcndi^!D#9Mne zx7n@I|2i=zl4jyPs@%w(NS=?9uUIx;l=rTE%~yFcTOIV@1)y50TB9hgxmi>cCLe$- zMq?>O*Oe`jnpHH98jD-9EXhz+=~}cIiz|kvEbKmcI3!BA38tSdihk|6YEgEj70(pw z%>wRZC%V8tI@}q@3h$(uQN+t`XZ7ZRuB{V>ER)Y*XlH6Z-IcboAasE6Erb+;HT~v# zwcOi(x8h;|^9djWxEjba+jj0DV9g>@PxFqclj%hIUY_W7MsF`r*f!;R3oe^w#FlFr zj=PIDTyi_Z@4_;0T}SU@ z&n^k(o*SYeTI`z4X6}E5zh$-LyP_r05|Sja=Qwwml*`7QxU1irt@QU-pq3uqQ;r`$ z1$fGmd>JX@ldLB)qWQ!Vq9|nYc+J>`r zVB-zV(?z&Fu`5El+Sy{ z!u_7^!(U;0F7Bt`{%z|w)snCA^mkJqP5P$}JoLnA?e~m$=PI987GF=eY(9XOZ8&e> zjUj94^S26M$)2;G6R}YgCySTA#iAEHyeG=e_nWM+O+bc!==#n4Jw4ICYE zhK>eQd1a`$b$bI111>O33lvL*U>xX_)p$y=jMJA*#sgQ%+{eXqyj)W zfkYVq)KDXs!bklm>iV)5HC3fr18;e~nn-5N%!kKCQ4nNNlmJbZBMu9dMMab~NfHG| zjf6Bolye4(qF+s@6BI!Y!W2x#UbJMut9oQ9;$M|0P*6nC6hr{nBG!qD;L$vy8a`-M z)HPjLM^S}pYP_l?M;Oh7tSXAA&&w}eW<+g?{_6fUhFQ3qvv!n0s6)9P%&P?=Q9Ql< zbWtQaYl0}4(8Zq~;J52hm)x%GYUaZ0(M1BWU|p|@zPlF#*q*eN@0vx!(vu8hWTum{ ztpG0q-HtjUvIEob_ErW!xy3|n3UaJ#DqX5JrKv5da|~=*;?{H-DrlJOCL6S6JcMs-R%os8fwBoR5wm_A8L5~D(&c~_Ht#zhRQ6ynMHm?7Wh3l zi@f!ju>Kc+)JSfc>u`V1=Q>TzeS9>|vlL%#QD>`|mR0)TTk6wH|GXeeGBmDu0c;f> z(hXAA$gZlZs`ii;b3`~-`K?j*2?kRkii#*1dH_;UcMW6Vn|XrA`=_I$e&eHh|Ciog z%b95<<)V1+m;U;XjBTAR0{<)Q-<kr+9T(z)SrWvUaHb$?f*=WQBpQLFuvwNOAc}%el7gE}R}>{d ziVBJ%Xb>$cniLOk|I%^l$D#BB3ysv3X2<$!%KcT;^OzSrsx)K&vli&gWr;n7DlpWpMg z0Y^r9g@M~Vo^yWUF~y}3qOMbwFPNeaW(IYIg_yEfVVP_mKb($*Zk-)BTFs~7`ugN^_L zTQ;iNsh{1oOT)#*;-$?`@kjsV9V^}Pck5;hahiuNR5^^wBz()kG7Q`X;q1~f&Nw&` z$XH$`1lOom4ts(c#5XS?q7H?o3B9Bm zv}VEge}X8E_zl;PHh0SB-tmPgOJ9oOCq{IpY^h{Qbm1b*EXh&tJ(6sGA@&hy`*LQY zN(7>pfp!nEtA9C~vJOEq!4222^flKkg!@ZQb&gR*N=d8t9WSV=n29@8dL^ z?~u%H%#D3kbemFK&DSkrbdPx47g}6D=<|4dM(}x)yr#FVs}R3TylkRNDsK!@HdLe) zYz48J7yiHIOg}wF)T8Sf==qz58dfQ!kYSI+&}T@vWPfE$cr)yeN#F3Yo}K|qTBMzS zmtUMu#ZiK<>@l^5e_Q@_?MZmzU`J_-4o&N(IjbHpH#$9B69%ha2D%uY}F7{ ze`*%;hOVg!ktH#6vs?A0siUq!cBH7jh`wuAe*3977+r7nyRL2OfzVgZ(}Co67Qb+( zQ)XGURGSfkmN8+duucMzy$VL3!RRHqPV;8JZ==8eRJ=`2RGcm}3wdTC*w>ys3i;9# zmJbehB#vd&p-xpjDo8P>QEEaw8PJBNWyB~Lh;8wp`hy+?au4@hLn*$Oq4`PtBJ7G# z>`+WNkT~i!U}9z8m(UduY*U z+l=NNtW#lSN#L3Q{>8vMs z1Y*$GM?{bq#-v}7D9boNMzZlMOxI+c+GwuIaMDnfu42X=%2^%Cv9q-8Le+k!TIS83 znt5F%V)pK4wOx&=yB)fI5Bu}ergCH zubw9O97gamJpZm#P@8Zt;-$&g$=Ax{lj5o6JRE}fn`Qc1d3YcB5Wzi3XK6q!a6I+&t~07I}zN9sP`i91h)>?c05Z@b}}O|<&EPem(t-t?;cJ7vNr zGvxykypgcH5i7run!b^dy%Ev3!&l4PCObYWZc=2S!x88a2McTqQc}N%?0&K?0 zUl(s!`l(sI9D_F%ro=)ASuNU(k+k2L<$U+4m}Pl&y&{afRD|hp0s;&1csj)=ole=a z<=8AhZu0ywAR+#aQ&gvYGzN$cIY7@CvQ#IHq(Z|rXhr7Ks#{GyJMSnV)P$Mn%{;nDp5QxOEk@FSc% zKD20~=V$+m=yEDC>n?;H%hlL)U3=|z-@vxyLt8&;5ix~0$~(#>mt@^PC1MK8!hI2@;b&dS8A=NG3QP{NI;$hY?zsBeaC9j7InVuC=%~zsD zr7UWtbI!V2owMF)>RAXJj29e3=qyJ%`I)CcjX46fq>^=H2O3ha#cR%-Z3?1UMg7Z`+jqCMc-p45Y^0kKX)KT8G>k=P9!Qn2JbC%O=@PmQ zKvbYh1xlhcv-wbITjG%*HOH-zS2WakzxqTrJKv0u&0D@Q&)!{C1==8h&>BfXnI%Ld zi)jpD@Xq|$LM_k}-mfA*Ua0DFjS8UpZPC4GsCWUsr;YGPZ;`|3ScIpN_y z2L0w!(V|m>x^N((X|P#ARdO|{NGNFv0jPtH0wnX0F+v3SNF!(VC+_)-Jr5VB6gzTv z+uPQlz_R54<>*wd`Em!$lW@U8}kb2w`d;9-8E5K|UAU&)D%x)_&ABsGX0=T|RMiA5r2R zLAvB6Ko2a%w8YCv0Q^eVH))xQ_L7J##A?d;vhn=KsW(Hrpy4N#l0F-+a$t2|Gv0OIld#xKNsnS zL^F9wWZoShhfHA!5nK*#W+}Tg%g6~c;tZbKP!?8MBxH(t(od`pxY?rzW*fY{jBhch z{_K26ejG9Vi}Aa&edy~FZsV;s%5jy-EdH*qax@mb0$8k7HklV*Fg#;6nzA8~g2uX< z>8mF=GPwF8GFD+scA}Q5e3`-M3`WOj zAT;ZWL(zW0DQc>Myqa$df{NNzf_KqR3~EkC0){Z9v%wKl3RN+rt~sQa{J6Uieq^if zJ#UH7b6p|P_A&CQ5^pUPw|4+aU~C*G1B>xkff}z;LB{L=lQq<@e#iZ=@3$0&s3Q_S zAi`Js2?&srM1Ztq>+roy?FT!V+wJyKyc2r=Fm!D#6j-W~ov8!MA+2B{GB5+*W~X;M zs_p&Mh7uDB9oVUz1aDNBK(U2`JLya#@8dL!-ud7b=Dve~i|`~NrUP=X?Ad*+>bkE@*Z;m8YhCoW16qRx@rppEZHD+6Xt3WZ3X zt;mdz8rXB=7a7#0Ys$i^RI5qFdMN8rkD;%J(S%ld$0;n}#>uPZ;ncfKaYxZY94QQH z`5h3b1C3hF-AU{6Z1aiw#j`8Xj?PV^`X}ulA2}NdZnmPKABprCIk+7* z!`a>RRl63t53MGfoJ6#^7VJ zOtL539(w4v>}-XI2>?#*PT6knua@n8yGqmfc01?ny52fx>$`2Wd4>0et#dY4Tj#9X zZRb5>1mZ9OvZp)|_$YpoU>Z#_06ezSECD59nyc8Z%64=@*X+7+>4s)=*Nh887a+n5 zkr8BpPiFZMBtxO(A>90$E`{FIn>Ue1zSH!xG?iQX-N(kE9A7O}S3M@Iy!MI}tXSFcH7nMgvT~ zU{hDcjAlx~1C~7&~BfFYd_<4@yX{UcwQhuY9{BI)_=Uwqjf`*A3!iuX=)r-D1 z+V&^77)AlEm>W5`@jQZnPBu&($LQCi?A`Cb)X&ZlUCTb6d`-1n%-!8|D&Nc<3#~vVlC!wG%KY41IG=&^)d^(+57z%J`)2H-MwU8{9h8>K z$(vT;GcKI9%~huqQQHDmH|hvpS%=Xi9fDirn46vMwwmRlp0GMl_>$XbY!S_2g)jdfSSRjlA@9>}|Gj&d1sk+Zh z-Ai_&UH>6=?UFzO*%=v3#WY_*%ya^(15hAa`thAn^mmD|@F!)aqFp>4W$GNATNJ@J8J@NrB*NSV?X zRivEMB4<+Mn47MeG~)5RJeb)w)66_Pv&*{7Og+BLibmz(iGDu2@*o)5zFKtfeW{*t{sntTe`iyS;vRw!UedlW)(i95PD`F-eE!HK{K$YLOH~XjNa(SasODhuHxDLIfBPKpV!3^@AQ zkRhq1Q9%j0j1qz$yAH3M*LA2}Rey0L-kq6u$5#0WaU*Rs+TZS$@E|5t}R zJ3KnwjnkV)jd%5q>%}^(hV^RE-ccXAe#`-c3SrctrovzZ{mX>_9t_I9%$M=+GD z#_%U@y=ljew>#B>UE6MLvpHGNHmmlFLN?9WuxXA9S=jo%t_go@vO+$=DT`2gaLe_Q zn(3+-n(V;WM%(N+r&_=6V|U%v-!^&X8x$2)?|Ur8Cl7*=um}; ziavNmEXs2QfEX5H_OtjhLb>rc#(uY6<%ofXo%7{`NI93hi#%dSj<0Q0DlUxze6}K% z2glis5eg_28bd^tcoLx!^m8#z2oMeHQSw3%w8#+lCm#>tRglZGS#?d7V{nQ+?SP9S zqKP1Qswv|U;oBbM_6A^JLf)eYfvP07hCT58Mr3h^~CNLvZx+uORi_ALi06O5mv zc_5M+Td#8BI@OgL>iWTs!~3=_!XdZ`B_ab&0+dZh40HM97(uj6KE9xz>@`)E5JlKc zleSe(2na*=>%|8Z0Jl~}T*|>3u0Mzvz9xbkFu>xe>Ix6_V-4WTGtAt{Wt1139rFv} z*X3eC%3gja^+}kMSH_<9sR0ZosOVd?;#U~MP6lcnGRlocjQw}afp~HW1|30}rv_Ui zOhnBKXyNIY0%J3@+kRW;(4@u*Jo~uOUC)leHA^VEz>g=8l%~00{th6*D*}B6&`Vdc zyY>7$+q$Jb6T!i=^Ao9vRd|dMU{WX{7@*!$3zR^w$&=+MdHgah;WHw<>#iLQsME#bj$MB? z-of3?{oUw_o89fr=#1TFzZ>n?thSrciq*UIYV-`Au5@kWN%nZ5DkG0P6v<-bf%^|1 zW+V6T@Z;&-(K~Nls%b~wcwH#ckyoBkE9=M$&s{Heqt)m{{*;Km4S)~i$NzOwGiI4z zGpiWxl=rWFu2#MhXE;ei1K}xcvTtiOcau4yzERNK&DBMxAP&(QZ4?B-6+4)=z%QUV zgjjTT=<1TZ;+AfI%`2DR6K~|RMR3k86kgP8J|J7agvdx$PG_MCg_?&q7=G0fb393r z&p7gNS15{M8V)91bnd>FJ-TMw8fT1+ot2nWG|JKdzz#fe1obAdS)=LLgwDFC33kI) zB}i@~+HsDBUSih?fDQZ~7+Fw#4b>t4k`18+%G1%j2*M_c$Sq+7|NC3tZic?376(!z zkRyW}2$VGWI|qzlRJA7UcbdY76UB#vq>?u(-udDd>fjU$Y8;wbhdNgEKxTQ@8QD@E zaYyFaMwnEwL)$hdL(`s9v`u@Q+yx#!Oq7^Gk}oz8qsYkJjW|fZ$r*k83ZN4J!5ihf zWw&5T2gaVAUuy9FJ76G6pjOeLD~J>nbKmvfn}`-eI+01g<|0B>W^S;^fnEQpmZ(C5B(3{uD)?>wtj>!T9PDToAVeC^%iGBAEC) z_zSpYtpz2CBo}op@Z8u^kd}1r|=KSZqS`k?IZdCH8-7OEK zCWiyojyyjrD3r@IQG5}&z$7s|9D6s0&{I@GsD^)Bms0hrtDFp=;!1?fqK>>y*-6WkcL;T92y0y_(5EUf|8xpQUK7Cuf|QxD+HJQDO>BnNnE{jeO@)OH?ZPlx zKnM!5Ol};`cOslDU8}AT?WjREwfj+HaFjuG=!2fBDAh^RMJeuw`(EXCTPJ~y4jVLj z#s*_7hz!< zr10+@J0`aIaV|@=!n%y z`52of9F7TLL5^sV<7@WH^P-S@6rFMo6YOK>TX#n8n`gq@+H>*c8(e&QrRFtO@oxfr z`*${j2-9-@m_~))oxSYM3-Mb=Um6l?iq3mt&B|Pydd4{+HPEKh9O|_5FJ_j%l09 z7RK~%sDB)btnC+ec^!Y(;aKnLci?h;1=wW6vrBE#aO<4uA^cPb10#nR_V%{XN*T#R8r0Dd!q49@~L7N{lbu}Hj z=nl>j+nAk<6_^^Tnt#-zD|I*aP@%-CnB5>XjPyj)gthc*(2&J;7Ywu-$N|qV3n#?m zLD=H(Vx}xfJ{l5|#m)f*5c=w8>;TIpK~=_ zL^uvtrtB`1SuYDgyx4Wgqxj28B8eAwH+Q>-tJ}@)?&7lB-CQnR_xJnT>yiH+qCNr!^or)>ShGt;CM58wP~GVEsinPY_PFaV0w8*x2Fzw ztDtFf+NgnuX+5L4v9^+&R8cttj(vT`O1!5LY&r<63{5{vSOsgA!_Wq|wi+}_?Tp1< zcWv6r252%=UuzgpA7vz``hOGZI;=9XrR4qb!o-e159A<+D%i;J^SgFqS^!LVE+ja@ z$V8-9AY+P?7xZDeultVb8A_{ARiiwR$uk-4jcjF_jkSFtI8 zypi_K6n%)2QaL5rN;=CW9nVdMKHX|^oJL)N&D8CtvEu707&7OkF2ivV57!oaGI21K z1t)|3emS_E)3p4*G9DWge}0vxjE`@b|G{jsjpU*-<-yBg2T#YaN9v-}xJc|G&j9fx zlcwFP!9ZYeH1?JK?0-Q~(9El3?85#tVufMzO|x|$R_cZDZ=NqCrhmADS=PUg)cm-+ z^s3d5SRR}^JeS8m#pNT8q7Kz~T8woJ^+Ua^yY;GD257A+?Nz5ub-|FtGWC%VLyD6X zU9;{+2HrkTXhYV*Mp{T;O&D@NOe(T3`QHJI6HQdqH?I5E@2}CikVIU2Kvz7aKBp(e)Oz6$GHHLH95OkF}dmdAfTdU!dBXwlulU2=nu0dHD8g4^)EUVEYe1~Tr{YSLOhXeZ02|pu`Hwr%akQOPq6tyNc z?MjqYc;QIVr>QDKh7lmBu~&3oeV9icTu=k7TYvs@bPoUW?G+l%7lKpV?_!bv{BfD( z{NEoh*si~&rg{U_|LuQnDIEU7&Hu;k|2`e<{{!*=VgGl*`h#HlFG2S}jiWX_OP}c< zP~7Zp;#J)3w@O!L+wE=UmdvL`UfZ0rRW0*O-Hl$DY~6)qi*r`koHH)woYldcv$;3t zY^uyT>l!2TrOR;6dNSt>tvP37XQ^hb`|gf_n^nr5EZA;V+sPH1c)OXLg1!BGK;T^6 zE~s3cK#YF_9xJpH(5x(TeVuHR>4r@%yqxBlpDR_XTh6xw27*c z6!M9h1mNA>egj6vIfFpDj_XQIs>Jrxh`@(HqPqkc2(+*4o$uR~n9 zDWHf)s>(ydq2j}|=lcG8G6y$F`*>LCVp%RREH`$+4vDXb94-q8XZ@=BqNJ*F`JzMc zRmdoh&YvJ6fku;*r>M%?LAAGo6|=PO@zYb`L5yA&6( z(lZtn)`glV!dEHqe7VpGNP8wE$J?avquZ-J#Yr@6_X1$yI$$;Qsy4}$s~lXqh|Yxz zaa79{a!nT{x;babJLk+RSAC8F)J^s;DH=Fw+?b$Zu1-n!iqE)W53==sI49~L|NAIA z%Jb!a^W$Ry_Ld9eQ(a4jkvI{Isw*U(C04<5B=#Ib-&Q4gQ*3EFjN9@3pUO0w`%xZ}rg8%}EYycjWu!I=>1)-_YOnOwM4p1t_q}U`e$5$!xzr+#g z+3@fF|J%fToSDBwlEkl8D}i-5$iX}f!>aFB)=tmWd)mgHJwiFKhK0N6d|agLVxHT` z$t`A<$)y=nkQ6eAjffpi7{T#DB}@?jWC$Yy!hn`W2BKm3HK~dG+$eQZ3h|9X3U8$B zSlz;e1>0|+e1`=1gptF@+eE=cX@x#Ur=D1hB{}_#9~v_h>MmxgF;rdSN)zs=COWe_ z(bQSXK5&~wjWJx6=wtRv28RZ&S#vK=Q8ubTQwoCy)5&k)w){Tyzva>YCO_Uw|8~<5 z7uH&$8W0VTd<#)0s`_(av2^Ec`QyM(0l}`)UgV95O-=kaImc2{Yzm=`zylwnq+cTi zGH#zk;3XuL^8ixA9`8!WzYE{iFCT{UhlUuLod1fG&|!VequK|jR)0ipRFku{m2|t& z6^j?S)vBOSQtr0-y@@Y!{PC?`=g|xo$c)RUAc7Bb zbb2PvI|-g)r6dQN=do@;FpMIR>Vx_a1Z9?kmf#xu#N21GRwYeB)~Ce`3nEiU(I^BC zSot~wi>mG_sC~^ONI^mzS?oGFjsHT5dZtm2HAhPPtG<<})c3)`$QHvxomP7td-&)^ zuZP$R_3&!jX|GVYvYNB9Vn&WBkE;)S=6i!ZCmp$WQ`hxIyKeO>zUjAH2xNiM3AuoJ z%8ff7f5yTu$+qu8$)}v0*t7{Ojt?$B0feff@d?{n;5Ks1)<0;}344f7B_=Zy)1d~Y zDe~%TU}qM{Cp_m2j7{5M>#xtd^gd}@H8j`Yi2usbt$#}frMYbu4Xa>oRLbcJYl z5s;8Pi9mowNUcCr;dPh1W%cKKyAPIi&%}J_%q&l2#D#+`LfN+Yes}MGHee?e-aor4 zX78+>Wi~nxm1jR-cyOyWCELU3UYbqamn>KeiztS7Mu9O+4BikEKP>j+P%G_%chw`G zZq$kM8clEyQUwS5*_c!K&!1oIT#ajE?;No=F~U3_u~i&ju;q&L`eVxMOU~uO9Xrnp zCdV`b9Lac&>|C~#?0(C#<6Z0b{C~TQ%G+TFC1U@5bbE8Sm*S(=Y8|=qUwVQ9x_>{< zq+p!|F(SE&Mtlv3x}lIY!-e&vErUU@!Sf!_{(iK(-w=V|`*|OXxH)FqZ$n4uc%wa2 z=70HQyJ~{Ikf|xKBv+8;+&pY zzM6K?`tGTmosiQs%afWT5wNXh-$@V`^QXGvHPXG72P60X@-DmOR+{&zeL+@2SDo^z ziuGz;xp@m|qGU@DB~7Xuxuk(yjaV1puk`;*El zniUd#jbzG_z!DuGlUn}T$_?^Uc$fJFIR9s%TKp)=`pqLCC?qT*D)yi2sYzc!TQah8 z^8N(-{{kgt6;(BL4NWa=9o?QN4pAb_l>R}+kw~L-P=DnbaZ@jdUk$wyL)(gVOcSmRZIB$w%LhBb>;?K7~#Kx)7|Ca z-^cgoZ)jv}Vrph?VQFP;V{2#c;OOM+;_Bw^!J{Y7Uc7qq?!%`q-+ui1^H0TGg;V4NH=hxP1>jo6el^wK~$WWN_<~+o=gl)@D*WUvqSn zTzc-SQaQ)fVaANZ&h=EnMAdF_wjkvegl7eJOQuEgYVTqoo8sRr zz?U~IUGUmKQyn+Yk1O%GG`DTw==phAOO1Qcz#FfdaVXBKw?3tAP?W3b1ty>E$Wb?t ze+>V$0-)wd02>`bsZ_nge1eMf6g>eK?b3p~?zxW`(YzoAylu=8`~3U#L%!;{HC0k>`r-5Bytv7IWf9BSpJVZN~N&duyfrOhNoajRHU8dsN!Yu{2HbU-(@mk zF80#BN!P^bufW#-i;Xl1Igm=@&UEvq6Cm>2&T0VvzynE#3;JtAiwLdy($Cyufd}*k zT}mghE-B7|DY4Kfx8SWbOV{=)cFRK*6F|>#-st6S+XHWpZ8cpBSpuCHG$3LUF_@`L z58!AyXnH^|meT4aNqUuX+wpBF6T8@`Y*iJX zk}b!fT1^bA54~e~f)ghCZn4PgN;=UmA;tei?1J-jH(+O>wt4tc<3AJyGdo^8_yPhu*SafglQt>m zDvDQiuB352UTN4pjz(*+b&)Vz68VB*=LnUmv+$Cw8*w=Q`FFhI!@xU!18xr^;QuBO z6dU4Z2I3TV@8Fi@CrvIj)CSAQLFI@44N6!X?7_o`6gpt6D4NU>1RccxF zsrL|bSFNxH6S1I3H-{VE@yIk6cD%IodYP1PUn7rS*K;e35!=BaIzyb^o~>I_v7A;c z_+n}sYq=vsJ3x%A?o^aI`jJT{;>r{^)4bXJ!0RqU{ypSd-NBXhzwqz9R1v>C1^Gvj|7RK%3PJn9&!AgBIRp{+;(vBN zk9hP}&*Fc$6~jWWDpx<=P0ar|sqEdnYG%6s?zaKC`5(7uDWBwP(FdMEf8j6w_Q9C@ P;sFD_gX8WN^yUBnkD=0U literal 0 HcmV?d00001 diff --git a/src/components/FileExplorer.js b/src/components/FileExplorer.js new file mode 100644 index 0000000..9521f9e --- /dev/null +++ b/src/components/FileExplorer.js @@ -0,0 +1,192 @@ +import preact from 'preact' +/** @jsx preact.h */ + +import SearchBar from './SearchBar' +import Node from './Node' + +import DOMHelper from '../utils/DOMHelper' +import treeParser from '../utils/treeParser' +import VisibleNodesGenerator from '../utils/VisibleNodesGenerator' + +export default class List extends preact.Component { + state = { + // generated by this.visibleNodesGenerator + visibleNodes: null, + } + + props = { + treeData: null, + metaData: null, + } + + tasksAfterRender = [] + visibleNodesGenerator = new VisibleNodesGenerator() + + componentWillMount() { + const { treeData, metaData } = this.props + const { root, nodes } = treeParser.parse(treeData, metaData) + this.visibleNodesGenerator.plantTree(root, nodes) + this.updateVisibleNodes() + this.tasksAfterRender.push(DOMHelper.focusFileExplorer) + this.tasksAfterRender.push(DOMHelper.focusSearchInput) + } + + componentDidMount() { + this.execAfterRender() + } + + componentDidUpdate(prevProps, prevState) { + this.execAfterRender() + } + + execAfterRender() { + for (const task of this.tasksAfterRender) { + task() + } + this.tasksAfterRender.length = 0 + } + + updateVisibleNodes() { + const { visibleNodes } = this.visibleNodesGenerator + this.setState({ visibleNodes }) + this.tasksAfterRender.push(() => DOMHelper.attachPJAX('gitako')) + } + + handleKeyDown = event => { + const { key } = event + const { visibleNodes: { nodes, focusedNode, expandedNodes, depths } } = this.state + let shouldStopPropagation = true // prevent body scrolling + if (focusedNode) { + const focusedNodeIndex = nodes.indexOf(focusedNode) + switch (key) { + case 'ArrowUp': + // focus on previous node + if (focusedNodeIndex === 0) { + this.focusNode(null) + this.tasksAfterRender.push(DOMHelper.focusSearchInput) + } else { + this.focusNode(nodes[focusedNodeIndex - 1]) + } + break + + case 'ArrowDown': + // focus on next node + if (focusedNodeIndex + 1 < nodes.length) { + this.focusNode(nodes[focusedNodeIndex + 1]) + } else { + this.focusNode(null) + this.tasksAfterRender.push(DOMHelper.focusSearchInput) + } + break + + case 'ArrowLeft': + // collapse node or go to parent node + if (expandedNodes.has(focusedNode)) { + this.setExpand(focusedNode, false) + } else { + // go forward to the start of the list, find the closest node with lower depth + let indexOfParentNode = focusedNodeIndex + const focusedNodeDepth = depths.get(nodes[focusedNodeIndex]) + while ( + indexOfParentNode !== -1 && + depths.get(nodes[indexOfParentNode]) >= focusedNodeDepth + ) { + --indexOfParentNode + } + if (indexOfParentNode !== -1) { + this.focusNode(nodes[indexOfParentNode]) + } + } + break + + // consider the two keys as 'confirm' key + case 'ArrowRight': + case 'Enter': + // expand node or redirect to file page + if (focusedNode.type === 'tree') { + this.setExpand(focusedNode, true) + } else { + // simulate click to trigger pjax + DOMHelper.clickOnNodeElement(focusedNodeIndex) + } + break + + default: + shouldStopPropagation = false + } + } else { + // now search input is focused + if (nodes.length) { + switch (key) { + case 'ArrowDown': + this.focusNode(nodes[0]) + break + case 'ArrowUp': + this.focusNode(nodes[nodes.length - 1]) + break + default: + shouldStopPropagation = false + } + } else { + shouldStopPropagation = false + } + } + if (shouldStopPropagation) { + event.stopPropagation() + event.preventDefault() + } + } + + handleSearchKeyChange = async event => { + const searchKey = event.target.value + await this.visibleNodesGenerator.search(searchKey) + this.updateVisibleNodes() + } + + setExpand = (node, expand) => { + this.visibleNodesGenerator.setExpand(node, expand) + this.focusNode(node) + this.tasksAfterRender.push(DOMHelper.focusSearchInput) + } + + toggleNodeExpand = node => { + this.visibleNodesGenerator.toggleExpand(node) + this.focusNode(node) + this.tasksAfterRender.push(DOMHelper.focusFileExplorer) + } + + focusNode = node => { + this.visibleNodesGenerator.focusNode(node) + if (node) { + // when focus a node not in viewport(by keyboard), scroll to it + const { visibleNodes: { nodes } } = this.state + const indexOfToBeFocusedNode = nodes.indexOf(node) + this.tasksAfterRender.push(() => DOMHelper.scrollToNodeElement(indexOfToBeFocusedNode)) + this.tasksAfterRender.push(DOMHelper.focusSearchInput) + } + this.updateVisibleNodes() + } + + render() { + const { visibleNodes: { nodes, depths, focusedNode, expandedNodes } } = this.state + return ( +
+ + {nodes.length === 0 ? ( + + ) : ( + nodes.map(node => ( + + )) + )} +
+ ) + } +} diff --git a/src/components/GitakoSideBar.js b/src/components/GitakoSideBar.js new file mode 100644 index 0000000..7c87dfd --- /dev/null +++ b/src/components/GitakoSideBar.js @@ -0,0 +1,135 @@ +import preact from 'preact' +/** @jsx preact.h */ + +import FileExplorer from './FileExplorer' +import Logo from './Logo' +import MetaBar from './MetaBar' +import SettingsBar from './SettingsBar' + +import cx from '../utils/cx' +import DOMHelper, { REPO_TYPE_PRIVATE } from '../utils/DOMHelper' +import GitHubHelper, { NOT_FOUND } from '../utils/GitHubHelper' +import storageHelper from '../utils/storageHelper' +import URLHelper from '../utils/URLHelper' + +export default class GitakoSideBar extends preact.Component { + state = { + // whether Gitako side bar should be shown + shouldShow: false, + // whether show settings pane + showSettings: false, + // whether pending for network request + loading: true, + // whether failed loading the repo due to it is private + errorDueToPrivateRepo: false, + // got access token for GitHub + hasAccessToken: null, + // meta data for the repository + metaData: null, + // file tree data + treeData: null, + } + + async componentWillMount() { + try { + const metaDataFromUrl = URLHelper.parse() + this.setState({ metaData: metaDataFromUrl }) + this.decorateGitHubPageContent() + const accessToken = await storageHelper.getAccessToken() + this.setState({ hasAccessToken: !!accessToken }) + const metaDataFromAPI = await GitHubHelper.getRepoMeta({ ...metaDataFromUrl, accessToken }) + const branchName = metaDataFromUrl.branchName || metaDataFromAPI['default_branch'] + const metaData = { ...metaDataFromUrl, branchName, api: metaDataFromAPI } + this.setState({ metaData }) + this.setShouldShow(URLHelper.detectShouldShow(metaData)) + const treeData = await GitHubHelper.getTreeData({ ...metaData, accessToken }) + this.setState({ treeData, loading: false }) + + window.addEventListener('pjax:send', this.onPJAXStart) + window.addEventListener('pjax:complete', this.onPJAXEnd) + } catch (err) { + // TODO: detect request time exceeds limit + if (err.message === NOT_FOUND) { + const repoPageType = await DOMHelper.getRepoPageType() + const errorDueToPrivateRepo = repoPageType === REPO_TYPE_PRIVATE + this.setState({ + showSettings: repoPageType !== null, + errorDueToPrivateRepo, + }) + this.setShouldShow(errorDueToPrivateRepo) + } else { + console.error(err) + this.setShouldShow(false) + } + } + } + + onPJAXStart = () => { + this.setState({ loading: true }) + } + + onPJAXEnd = () => { + this.setState({ loading: false }) + this.setShouldShow(URLHelper.detectShouldShow()) + this.decorateGitHubPageContent() + DOMHelper.scrollToRepoContent() + DOMHelper.focusSearchInput() + } + + decorateGitHubPageContent() { + DOMHelper.attachCopyFileBtn() + DOMHelper.attachCopySnippet() + DOMHelper.attachPJAX('github') + } + + setShouldShow = shouldShow => { + this.setState({ shouldShow }) + DOMHelper.setBodyIndent(shouldShow) + } + + toggleShowSettings = () => { + const { showSettings } = this.state + this.setState({ showSettings: !showSettings }) + } + + renderPrivateRepoError() { + return ( +
+
Access Denied
+

+ Gitako need access token with proper scopes (recommended: repo) to read this repository's + data. +

+
+ ) + } + + render() { + const { + shouldShow, + loading, + metaData, + treeData, + showSettings, + hasAccessToken, + errorDueToPrivateRepo, + } = this.state + return ( +
+
+ +
+ {metaData && } + {errorDueToPrivateRepo && this.renderPrivateRepoError()} + {metaData && treeData && } +
+ +
+
+ ) + } +} diff --git a/src/components/Icon.js b/src/components/Icon.js new file mode 100644 index 0000000..703dcec --- /dev/null +++ b/src/components/Icon.js @@ -0,0 +1,46 @@ +import preact from 'preact' +/** @jsx preact.h */ + +function getIconClassName(type) { + switch (type) { + case 'folder': + return 'triangle-right' + case '.pdf': + return 'file-pdf' + case '.txt': + return 'file-text' + case '.zip': + case '.rar': + case '.7z': + return 'file-zip' + case '.md': + return 'markdown' + case '.png': + case '.jpg': + case '.gif': + case '.bmp': + return 'file-media' + case '.js': + case '.jsx': + case '.ts': + case '.tsx': + case '.es6': + case '.coffee': + case '.css': + case '.less': + case '.scss': + case '.sass': + return 'file-code' + // TODO: adapt to more file types + // case '': return 'file-binary' + // case '': return 'file-submodule' + // case '': return 'file-symlink-directory' + // case '': return 'file-symlink-file' + default: + return 'file' + } +} + +export default function Icon({ type }) { + return +} diff --git a/src/components/Logo.js b/src/components/Logo.js new file mode 100644 index 0000000..18c792a --- /dev/null +++ b/src/components/Logo.js @@ -0,0 +1,14 @@ +import preact from 'preact' +/** @jsx preact.h */ + +import cx from '../utils/cx' + +export default function Logo({ loading }) { + return ( +
+

 

+

Gitako

+

Gitako

+
+ ) +} diff --git a/src/components/MetaBar.js b/src/components/MetaBar.js new file mode 100644 index 0000000..eee74dd --- /dev/null +++ b/src/components/MetaBar.js @@ -0,0 +1,18 @@ +import preact from 'preact' +/** @jsx preact.h */ + +export default function MetaBar({ metaData }) { + const userUrl = metaData ? metaData.api && metaData.api.owner.html_url : undefined + const repoUrl = metaData ? metaData.api && metaData.api.html_url : undefined + return ( + + ) +} diff --git a/src/components/Node.js b/src/components/Node.js new file mode 100644 index 0000000..13981b1 --- /dev/null +++ b/src/components/Node.js @@ -0,0 +1,42 @@ +import preact from 'preact' +/** @jsx preact.h */ + +import Icon from './Icon' + +import cx from '../utils/cx' + +function getIconType(node) { + switch (node.type) { + case 'tree': + return 'folder' + default: + return node.name.replace(/.*\./, '.') + } +} + +export default function Node({ node, depth, expanded, focused, toggleExpand }) { + const { name, url, type } = node + const item = ( +

+ + {name} +

+ ) + return ( +
+ { + type !== 'tree' + ? ( + + { item } + + ) + : item + } +
+ ) +} diff --git a/src/components/SearchBar.js b/src/components/SearchBar.js new file mode 100644 index 0000000..e016d82 --- /dev/null +++ b/src/components/SearchBar.js @@ -0,0 +1,17 @@ +import preact from 'preact' +/** @jsx preact.h */ + +export default function SearchBar({ onSearchKeyChange }) { + return ( +
+ +
+ ) +} diff --git a/src/components/SettingsBar.js b/src/components/SettingsBar.js new file mode 100644 index 0000000..a72050f --- /dev/null +++ b/src/components/SettingsBar.js @@ -0,0 +1,102 @@ +import preact from 'preact' +/** @jsx preact.h */ + +import storageHelper from '../utils/storageHelper' + +const ACCESS_TOKEN_REGEXP = /^[0-9a-f]{40}$/ + +export default class SettingsBar extends preact.Component { + state = { + hint: null, + tokenCleared: false, + } + + handleAccessTokenChange = event => { + const value = event.target.value + const { hasAccessToken } = this.props + if (value === '') { + if (hasAccessToken) { + storageHelper.setAccessToken('') + this.setState({ tokenCleared: true }) + } else { + this.setState({ hint: '' }) + } + } else if (ACCESS_TOKEN_REGEXP.test(value)) { + storageHelper.setAccessToken(value) + this.setState({ hint: 'Your token is saved, refresh the page to make it work!' }) + } else { + this.setState({ hint: 'Invalid token' }) + } + } + + render() { + const { hint, tokenCleared } = this.state + const { toggleShowSettings, activated, hasAccessToken } = this.props + return ( +
+
+

{activated ? 'Settings' : ''}

+ +
+ {activated && ( +
+
+

Access Token

+ + With access token, Gitako will be able to browse your private repositories with no + API request time limit. + +
+ + How to create access token? + +
+ + Gitako stores the token in{' '} + + chrome local storage + {' '} + locally and safely. + +
+ + {hint && {hint}} +
+
+
Position of Gitako (WIP)
+ +
+
+
Table of Markdown Content (WIP)
+ +
+
+

Issue

+ + Draft a issue on Github. + +
+ Report BUG or request feature. +
+
+ )} +
+ ) + } +} diff --git a/src/content.js b/src/content.js new file mode 100644 index 0000000..ece2f7a --- /dev/null +++ b/src/content.js @@ -0,0 +1,10 @@ +import preact from 'preact' +/** @jsx preact.h */ + +import './content.less' + +import GitakoSideBar from './components/GitakoSideBar' + +const GitakoSideBarElement = document.createElement('div') +document.body.appendChild(GitakoSideBarElement) +preact.render(, GitakoSideBarElement) diff --git a/src/content.less b/src/content.less new file mode 100644 index 0000000..a8aa0ee --- /dev/null +++ b/src/content.less @@ -0,0 +1,258 @@ +@import './octicons.css'; +@side-bar-width: 260px; +@github-content-width: 1280px; +@content-width: (@side-bar-width + @github-content-width); + +.with-gitako-spacing { + margin-left: @side-bar-width; + @media (min-width: @github-content-width) and (max-width: @content-width) { + margin-left: ~'calc(' @content-width ~' - 100vw)'; + } + @media (min-width: @content-width) { + margin-left: 0; + } +} + +.markdown-body pre { + position: relative; + .clippy { + position: absolute; + top: 10px; + right: 16px; + width: 32px; + height: 32px; + border: 1px solid #ddd; + border-radius: 4px; + background: #f9f9f9; + &:hover { + background: #fff; + } + &:active { + background: #f0f0f0; + } + + &.success { + i::before { + content: '\F03A'; // .octicon-check + } + } + + &.fail { + i::before { + content: '\F081'; // .octicon-x + } + } + + i::before { + margin-left: 2px; // make icon centered + } + } +} + +.hidden { + display: none; +} + +.invisible { + visibility: hidden; +} + +.gitako { + .gitako-side-bar { + position: fixed; + top: 0; + left: 0; + display: flex; + flex-direction: column; + width: @side-bar-width; + height: 100vh; + z-index: 2; + background: #fafbfc; + border-right: 1px solid #e1e4e8; + + @media screen and (min-width: @content-width) { + border-left: 1px solid #e1e4e8; + left: ~'calc((100vw - ' @content-width ~') / 2)'; + } + + &.hidden { + .hidden; + } + + .gitako-logo-wrapper.Header { + position: relative; + + .gitako-logo { + display: flex; + justify-content: space-around; + align-items: center; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + cursor: default; + user-select: none; + -webkit-font-smoothing: antialiased; + + &.breath { + background: linear-gradient( + 135deg, + #ff2400, + #e81d1d, + #e8b71d, + #e3e81d, + #1de840, + #1ddde8, + #2b1de8, + #dd00f3, + #dd00f3 + ); + background-size: 450% 450%; + animation: rainbow 9s ease infinite; + -webkit-text-fill-color: transparent; + -webkit-background-clip: text; + background-clip: text; + + // https://stackoverflow.com/questions/10814178/css-performance-relative-to-translatez0 + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); + } + } + } + + .octicon { + transition: 0.3s ease; + } + + .octicon-color { + color: rgba(3, 47, 98, 0.55); + } + + .gitako-side-bar-content { + display: flex; + flex: 1; + flex-direction: column; + + .meta-bar { + position: relative; + padding: 10px; + font-size: 13px; + line-height: 20px; + color: #586069; + background-color: #f1f8ff; + border-bottom: 1px solid #c8e1ff; + + a { + // fix a weird bug: + // when gitako failed loading repo, cursor hovering in meta bar will be 'text' + cursor: pointer; + } + + .repo-name { + font-weight: bolder; + } + } + + .description { + padding: 4px 10px; + } + + /* search input */ + .search-input-wrapper { + input[type='text'].form-control { + box-shadow: none; + width: 100%; + } + } + + .no-results { + padding: 0px 10px; + color: #666; + } + + .file-explorer { + width: 100%; + height: 100%; + overflow: auto; + outline: none; + + .node-item-row { + background: #fff; + &:hover { + background: #f6f8fa; + } + &.focused { + background: #f0f0f6; + } + + .node-item { + word-wrap: normal; + word-break: break-all; + margin: 0; + color: #0366d6; + line-height: 20px; + padding: 6px 0; + cursor: pointer; + border-top: 1px solid #eaecef; + transition: all 0.5s ease; + + // folder icon rotate when expand + &.expanded .octicon.octicon-triangle-right { + transform: rotate(90deg) translate3d(25%, 0, 0); + } + + .node-item-name { + padding-left: 4px; + } + + .node-item:hover .node-item-name { + text-decoration: underline; + } + } + } + } + } + + .gitako-settings-bar { + border-top: 1px solid #eaecef; + &-content { + padding: 0 10px; + &-section { + padding-bottom: 10px; + } + } + .access-token { + border-bottom: none; // prevent overwrite by github style + } + .access-token-input { + width: 100%; + margin-top: 4px; + box-shadow: none; + } + .placeholder-row { + display: flex; + justify-content: space-between; + align-items: center; + padding: 6px 10px; + + .settings-icon { + font-size: 20px; + cursor: pointer; + } + } + } + } +} + +@keyframes rainbow { + 0% { + background-position: 9% 91%; + } + 50% { + background-position: 91% 9%; + } + 100% { + background-position: 9% 91%; + } +} diff --git a/src/manifest.json b/src/manifest.json new file mode 100644 index 0000000..b634787 --- /dev/null +++ b/src/manifest.json @@ -0,0 +1,15 @@ +{ + "manifest_version": 2, + "name": "Gitako", + "version": "0.1.0", + "author": "EnixCoda", + "description": "yet another GitHub extension.", + "homepage_url": "https://github.com/EnixCoda/Gitako", + "permissions": ["tabs", "storage", "*://github.com/*"], + "content_scripts": [ + { + "matches": ["https://github.com/*"], + "js": ["content.js"] + } + ] +} diff --git a/src/octicons.css b/src/octicons.css new file mode 100755 index 0000000..c2ef3ee --- /dev/null +++ b/src/octicons.css @@ -0,0 +1,537 @@ +@font-face { + font-family: 'Octicons'; + src: url('assets/font/octicons.woff2') format('woff2'); + font-weight: normal; + font-style: normal; +} + +/* + +.octicon is optimized for 16px. +.mega-octicon is optimized for 32px but can be used larger. + +*/ +.octicon, +.mega-octicon { + font: normal normal normal 16px/1 Octicons; + display: inline-block; + text-decoration: none; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + fill: currentColor; +} +.mega-octicon { + font-size: 32px; +} + +.octicon-alert:before { + content: '\f02d'; +} +.octicon-arrow-down:before { + content: '\f03f'; +} +.octicon-arrow-left:before { + content: '\f040'; +} +.octicon-arrow-right:before { + content: '\f03e'; +} +.octicon-arrow-small-down:before { + content: '\f0a0'; +} +.octicon-arrow-small-left:before { + content: '\f0a1'; +} +.octicon-arrow-small-right:before { + content: '\f071'; +} +.octicon-arrow-small-up:before { + content: '\f09f'; +} +.octicon-arrow-up:before { + content: '\f03d'; +} +.octicon-beaker:before { + content: '\f0dd'; +} +.octicon-bell:before { + content: '\f0de'; +} +.octicon-bold:before { + content: '\f0e2'; +} +.octicon-book:before { + content: '\f007'; +} +.octicon-bookmark:before { + content: '\f07b'; +} +.octicon-briefcase:before { + content: '\f0d3'; +} +.octicon-broadcast:before { + content: '\f048'; +} +.octicon-browser:before { + content: '\f0c5'; +} +.octicon-bug:before { + content: '\f091'; +} +.octicon-calendar:before { + content: '\f068'; +} +.octicon-check:before { + content: '\f03a'; +} +.octicon-checklist:before { + content: '\f076'; +} +.octicon-chevron-down:before { + content: '\f0a3'; +} +.octicon-chevron-left:before { + content: '\f0a4'; +} +.octicon-chevron-right:before { + content: '\f078'; +} +.octicon-chevron-up:before { + content: '\f0a2'; +} +.octicon-circle-slash:before { + content: '\f084'; +} +.octicon-circuit-board:before { + content: '\f0d6'; +} +.octicon-clippy:before { + content: '\f035'; +} +.octicon-clock:before { + content: '\f046'; +} +.octicon-cloud-download:before { + content: '\f00b'; +} +.octicon-cloud-upload:before { + content: '\f00c'; +} +.octicon-code:before { + content: '\f05f'; +} +.octicon-comment-discussion:before { + content: '\f04f'; +} +.octicon-comment:before { + content: '\f02b'; +} +.octicon-credit-card:before { + content: '\f045'; +} +.octicon-dash:before { + content: '\f0ca'; +} +.octicon-dashboard:before { + content: '\f07d'; +} +.octicon-database:before { + content: '\f096'; +} +.octicon-desktop-download:before { + content: '\f0dc'; +} +.octicon-device-camera-video:before { + content: '\f057'; +} +.octicon-device-camera:before { + content: '\f056'; +} +.octicon-device-desktop:before { + content: '\f27c'; +} +.octicon-device-mobile:before { + content: '\f038'; +} +.octicon-diff-added:before { + content: '\f06b'; +} +.octicon-diff-ignored:before { + content: '\f099'; +} +.octicon-diff-modified:before { + content: '\f06d'; +} +.octicon-diff-removed:before { + content: '\f06c'; +} +.octicon-diff-renamed:before { + content: '\f06e'; +} +.octicon-diff:before { + content: '\f04d'; +} +.octicon-ellipses:before { + content: '\f101'; +} +.octicon-ellipsis:before { + content: '\f09a'; +} +.octicon-eye:before { + content: '\f04e'; +} +.octicon-file-binary:before { + content: '\f094'; +} +.octicon-file-code:before { + content: '\f010'; +} +.octicon-file-directory:before { + content: '\f016'; +} +.octicon-file-media:before { + content: '\f012'; +} +.octicon-file-pdf:before { + content: '\f014'; +} +.octicon-file-submodule:before { + content: '\f017'; +} +.octicon-file-symlink-directory:before { + content: '\f0b1'; +} +.octicon-file-symlink-file:before { + content: '\f0b0'; +} +.octicon-file-text:before { + content: '\f011'; +} +.octicon-file-zip:before { + content: '\f013'; +} +.octicon-file:before { + content: '\f102'; +} +.octicon-flame:before { + content: '\f0d2'; +} +.octicon-fold:before { + content: '\f0cc'; +} +.octicon-gear:before { + content: '\f02f'; +} +.octicon-gift:before { + content: '\f042'; +} +.octicon-gist-secret:before { + content: '\f08c'; +} +.octicon-gist:before { + content: '\f00e'; +} +.octicon-git-branch:before { + content: '\f020'; +} +.octicon-git-commit:before { + content: '\f01f'; +} +.octicon-git-compare:before { + content: '\f0ac'; +} +.octicon-git-merge:before { + content: '\f023'; +} +.octicon-git-pull-request:before { + content: '\f009'; +} +.octicon-globe:before { + content: '\f0b6'; +} +.octicon-graph:before { + content: '\f043'; +} +.octicon-heart:before { + content: '\2665'; +} +.octicon-history:before { + content: '\f07e'; +} +.octicon-home:before { + content: '\f08d'; +} +.octicon-horizontal-rule:before { + content: '\f070'; +} +.octicon-hubot:before { + content: '\f09d'; +} +.octicon-inbox:before { + content: '\f0cf'; +} +.octicon-info:before { + content: '\f059'; +} +.octicon-issue-closed:before { + content: '\f028'; +} +.octicon-issue-opened:before { + content: '\f026'; +} +.octicon-issue-reopened:before { + content: '\f027'; +} +.octicon-italic:before { + content: '\f0e4'; +} +.octicon-jersey:before { + content: '\f019'; +} +.octicon-key:before { + content: '\f049'; +} +.octicon-keyboard:before { + content: '\f00d'; +} +.octicon-law:before { + content: '\f0d8'; +} +.octicon-light-bulb:before { + content: '\f000'; +} +.octicon-link-external:before { + content: '\f07f'; +} +.octicon-link:before { + content: '\f05c'; +} +.octicon-list-ordered:before { + content: '\f062'; +} +.octicon-list-unordered:before { + content: '\f061'; +} +.octicon-location:before { + content: '\f060'; +} +.octicon-lock:before { + content: '\f06a'; +} +.octicon-logo-gist:before { + content: '\f0ad'; +} +.octicon-logo-github:before { + content: '\f092'; +} +.octicon-mail-read:before { + content: '\f03c'; +} +.octicon-mail-reply:before { + content: '\f051'; +} +.octicon-mail:before { + content: '\f03b'; +} +.octicon-mark-github:before { + content: '\f00a'; +} +.octicon-markdown:before { + content: '\f0c9'; +} +.octicon-megaphone:before { + content: '\f077'; +} +.octicon-mention:before { + content: '\f0be'; +} +.octicon-milestone:before { + content: '\f075'; +} +.octicon-mirror:before { + content: '\f024'; +} +.octicon-mortar-board:before { + content: '\f0d7'; +} +.octicon-mute:before { + content: '\f080'; +} +.octicon-no-newline:before { + content: '\f09c'; +} +.octicon-octoface:before { + content: '\f008'; +} +.octicon-organization:before { + content: '\f037'; +} +.octicon-package:before { + content: '\f0c4'; +} +.octicon-paintcan:before { + content: '\f0d1'; +} +.octicon-pencil:before { + content: '\f058'; +} +.octicon-person:before { + content: '\f018'; +} +.octicon-pin:before { + content: '\f041'; +} +.octicon-plug:before { + content: '\f0d4'; +} +.octicon-plus:before { + content: '\f05d'; +} +.octicon-primitive-dot:before { + content: '\f052'; +} +.octicon-primitive-square:before { + content: '\f053'; +} +.octicon-pulse:before { + content: '\f085'; +} +.octicon-question:before { + content: '\f02c'; +} +.octicon-quote:before { + content: '\f063'; +} +.octicon-radio-tower:before { + content: '\f030'; +} +.octicon-repo-clone:before { + content: '\f04c'; +} +.octicon-repo-force-push:before { + content: '\f04a'; +} +.octicon-repo-forked:before { + content: '\f002'; +} +.octicon-repo-pull:before { + content: '\f006'; +} +.octicon-repo-push:before { + content: '\f005'; +} +.octicon-repo:before { + content: '\f001'; +} +.octicon-rocket:before { + content: '\f033'; +} +.octicon-rss:before { + content: '\f034'; +} +.octicon-ruby:before { + content: '\f047'; +} +.octicon-search:before { + content: '\f02e'; +} +.octicon-server:before { + content: '\f097'; +} +.octicon-settings:before { + content: '\f07c'; +} +.octicon-shield:before { + content: '\f0e1'; +} +.octicon-sign-in:before { + content: '\f036'; +} +.octicon-sign-out:before { + content: '\f032'; +} +.octicon-smiley:before { + content: '\f0e7'; +} +.octicon-squirrel:before { + content: '\f0b2'; +} +.octicon-star:before { + content: '\f02a'; +} +.octicon-stop:before { + content: '\f08f'; +} +.octicon-sync:before { + content: '\f087'; +} +.octicon-tag:before { + content: '\f015'; +} +.octicon-tasklist:before { + content: '\f0e5'; +} +.octicon-telescope:before { + content: '\f088'; +} +.octicon-terminal:before { + content: '\f0c8'; +} +.octicon-text-size:before { + content: '\f0e3'; +} +.octicon-three-bars:before { + content: '\f05e'; +} +.octicon-thumbsdown:before { + content: '\f0db'; +} +.octicon-thumbsup:before { + content: '\f0da'; +} +.octicon-tools:before { + content: '\f031'; +} +.octicon-trashcan:before { + content: '\f0d0'; +} +.octicon-triangle-down:before { + content: '\f05b'; +} +.octicon-triangle-left:before { + content: '\f044'; +} +.octicon-triangle-right:before { + content: '\f05a'; +} +.octicon-triangle-up:before { + content: '\f0aa'; +} +.octicon-unfold:before { + content: '\f039'; +} +.octicon-unmute:before { + content: '\f0ba'; +} +.octicon-unverified:before { + content: '\f0e8'; +} +.octicon-verified:before { + content: '\f0e6'; +} +.octicon-versions:before { + content: '\f064'; +} +.octicon-watch:before { + content: '\f0e0'; +} +.octicon-x:before { + content: '\f081'; +} +.octicon-zap:before { + content: '\26a1'; +} diff --git a/src/utils/DOMHelper.js b/src/utils/DOMHelper.js new file mode 100644 index 0000000..b57ac0c --- /dev/null +++ b/src/utils/DOMHelper.js @@ -0,0 +1,290 @@ +/** + * this helper helps manipulating DOM + */ + +import pjax from 'pjax' + +/** + * if should show gitako, then move body right to make space for showing gitako + * otherwise, hide the space + */ +function setBodyIndent(shouldShowGitako) { + const spacingClassName = 'with-gitako-spacing' + if (shouldShowGitako) { + document.body.classList.add(spacingClassName) + } else { + document.body.classList.remove(spacingClassName) + } +} + +/** + * content above the file navigation bar is same for all pages of the repo + * use this function to scroll down a bit to hide them + */ +function scrollToRepoContent() { + const fileNavigationSelector = '.file-navigation.js-zeroclipboard-container' + const fileNavigationElement = document.querySelector(fileNavigationSelector) + // cannot to use behavior: smooth here as it will scroll horizontally + if (fileNavigationElement) { + fileNavigationElement.scrollIntoView() + } else { + document.body.scrollIntoView() + } +} + +/** + * scroll to index-th element in the list + * @param {number} index index of node item in the list + */ +function scrollToNodeElement(index) { + const nodeElementSelector = '.node-item' + const nodeElements = document.querySelectorAll(nodeElementSelector) + nodeElements[index].scrollIntoView({ + behavior: 'smooth', + block: 'center', + }) +} + +/** + * add pjax listeners + * call this when pjax redirected or page loaded + */ +function attachPJAX(fields) { + // TODO: switch for fields + const elements = [ + '.gitako a.pjax-link', // links in Gitako file tree & list + '.js-path-segment a', // links in the file navigation bar + ].join() + new pjax({ + elements, + selectors: ['.repository-content'], + scrollTo: false, + analytics: () => {}, + }) +} + +/** + * there are few types of pages on GitHub, mainly + * 1. raw text: code + * 2. rendered content: like Markdown + * 3. preview: like image + */ +const PAGE_TYPES = { + RAW_TEXT: 'raw_text', + RENDERED: 'rendered', + // PREVIEW: 'preview', + OTHERS: 'others', +} + +/** + * this function tries to tell which type current page is of + * + * note: not determining through file extension here + * becasuse there might be files using wrong extension name + * + * TODO: distinguish type 'preview' + */ +function getCurrentPageType() { + const blobWrapperSelector = '.repository-content .file .blob-wrapper' + const blobWrapperElement = document.querySelector(blobWrapperSelector) + if (blobWrapperElement) { + if (blobWrapperElement.querySelector('table')) { + return PAGE_TYPES.RAW_TEXT + } + } else { + const readmeSelector = '.repository-content .readme' + const readmeElement = document.querySelector(readmeSelector) + if (readmeElement) { + return PAGE_TYPES.RENDERED + } + } + return PAGE_TYPES.OTHERS +} + +export const REPO_TYPE_PRIVATE = 'private' +export const REPO_TYPE_PUBLIC = 'public' +function getRepoPageType() { + const headerSelector = `#js-repo-pjax-container .pagehead.repohead h1` + const header = document.querySelector(headerSelector) + if (header) { + const repoPageTypes = [REPO_TYPE_PRIVATE, REPO_TYPE_PUBLIC] + for (const repoPageType of repoPageTypes) { + if (header.classList.contains(repoPageType)) { + return repoPageType + } + } + } + return null +} + +/** + * add copy file content buttons to button groups + * click these buttons will copy file content to clipboard + */ +function attachCopyFileBtn() { + /** + * get text content of raw text content + */ + function getCodeElement() { + if (getCurrentPageType() === PAGE_TYPES.RAW_TEXT) { + const codeContentSelector = '.repository-content .file .data table' + return document.querySelector(codeContentSelector) + } + } + + /** + * change inner text of copy file button to give feedback + * @param {element} copyFileBtn + * @param {string} text + */ + function setTempCopyFileBtnText(copyFileBtn, text) { + copyFileBtn.innerText = text + window.setTimeout(() => (copyFileBtn.innerText = 'Copy file'), 1000) + } + + if (getCurrentPageType() === PAGE_TYPES.RAW_TEXT) { + const btnGroupSelector = [ + // the button group next to navigation bar + '.repository-content .file-navigation.js-zeroclipboard-container .BtnGroup', + // the button group in file content header + '.repository-content .file .file-header .file-actions .BtnGroup', + ].join(', ') + const btnGroups = document.querySelectorAll(btnGroupSelector) + + btnGroups.forEach(btnGroup => { + const copyFileBtn = document.createElement('button') + copyFileBtn.classList.add('btn', 'btn-sm', 'BtnGroup-item', 'copy-file-btn') + copyFileBtn.innerText = 'Copy file' + copyFileBtn.addEventListener('click', () => { + const codeElement = getCodeElement() + if (copyElementContent(codeElement)) { + setTempCopyFileBtnText(copyFileBtn, 'Success!') + } else { + setTempCopyFileBtnText(copyFileBtn, 'Copy failed!') + } + }) + btnGroup.insertBefore(copyFileBtn, btnGroups.lastChild) + }) + } +} + +/** + * copy content of a DOM element to clipboard + * @param {element} element + * @returns {boolean} whether copy is successful + */ +function copyElementContent(element) { + window.getSelection().removeAllRanges() + const range = document.createRange() + range.selectNode(element) + window.getSelection().addRange(range) + const isCopySuccessful = document.execCommand('copy') + window.getSelection().removeAllRanges() + return isCopySuccessful +} + +/** + * create a copy file content button `clippy` + * once mouse enters a code snippet of markdown, move clippy into it + * user can copy the snippet's content by click it + * + * TODO: 'reactify' it + */ +function createClippy() { + function setTempClippyIconFeedback(clippy, type) { + const tempIconClassName = type === 'success' ? 'success' : 'fail' + clippy.classList.add(tempIconClassName) + window.setTimeout(() => { + clippy.classList.remove(tempIconClassName) + }, 1000) + } + + /** + * + */ + const clippy = document.createElement('button') + clippy.classList.add('clippy') + const clippyIcon = document.createElement('i') + clippyIcon.classList.add('octicon', 'octicon-clippy') + clippy.appendChild(clippyIcon) + + // set clipboard with current code snippet element's content + clippy.addEventListener('click', function onClippyClick() { + if (copyElementContent(currentCodeSnippetElement)) { + setTempClippyIconFeedback(clippy, 'success') + } else { + setTempClippyIconFeedback(clippy, 'fail') + } + }) + + return clippy +} + +const clippy = createClippy() + +let currentCodeSnippetElement +function attachCopySnippet() { + const readmeSelector = '.repository-content .readme' + const readmeElement = document.querySelector(readmeSelector) + if (readmeElement) { + const snippetSelector = '.repository-content .readme pre' + const snippetElements = readmeElement.querySelectorAll(snippetSelector) + readmeElement.addEventListener('mouseover', ({ target }) => { + // only move clippy when mouse is over a new snippet + if ( + Array.from(snippetElements).indexOf(target) !== -1 && + currentCodeSnippetElement !== target + ) { + currentCodeSnippetElement = target + currentCodeSnippetElement.insertAdjacentElement('afterbegin', clippy) + } + }) + } +} + +/** + * focus to side bar, user will be able to manipulate it with keyboard + */ +function focusFileExplorer() { + const sideBarContentSelector = '.gitako .file-explorer' + const sideBarElement = document.querySelector(sideBarContentSelector) + if (sideBarElement) { + sideBarElement.focus() + } +} + +function focusSearchInput() { + const searchInputSelector = '.search-input' + const searchInputElement = document.querySelector(searchInputSelector) + if (searchInputElement) { + if (document.activeElement !== searchInputElement) { + searchInputElement.focus() + } + } +} + +/** + * simulate click on node item, for triggering pjax + * @param {number} index + */ +function clickOnNodeElement(index = 0) { + const nodeElementSelector = '.node-item' + const nodeElements = document.querySelectorAll(nodeElementSelector) + nodeElements[index].click() +} + +export default { + attachPJAX, + attachCopyFileBtn, + attachCopySnippet, + clickOnNodeElement, + focusSearchInput, + focusFileExplorer, + getCurrentPageType, + getRepoPageType, + setBodyIndent, + scrollToNodeElement, + scrollToRepoContent, +} diff --git a/src/utils/GitHubHelper.js b/src/utils/GitHubHelper.js new file mode 100644 index 0000000..096157b --- /dev/null +++ b/src/utils/GitHubHelper.js @@ -0,0 +1,33 @@ +export const NOT_FOUND = 'Repo Not Found' + +async function getRepoMeta({ userName, repoName, accessToken }) { + const headers = {} + if (accessToken) { + headers.Authorization = `token ${accessToken}` + } + const res = await fetch(`https://api.github.com/repos/${userName}/${repoName}`, { headers }) + if (res.status === 200) return res.json() + // for private repo, GitHub api also responses with 404 when unauthorized + throw new Error(NOT_FOUND) +} + +async function getTreeData({ userName, repoName, branchName, accessToken }) { + const headers = {} + if (accessToken) { + headers.Authorization = `token ${accessToken}` + } + return (await fetch( + `https://api.github.com/repos/${userName}/${repoName}/git/trees/${branchName}?recursive=1`, + { headers } + )).json() +} + +function getUrlForRedirect({ userName, repoName, branchName }, path) { + return `https://github.com/${userName}/${repoName}/tree/${branchName}/${path}` +} + +export default { + getRepoMeta, + getTreeData, + getUrlForRedirect, +} diff --git a/src/utils/cx.js b/src/utils/cx.js new file mode 100644 index 0000000..b70d7d5 --- /dev/null +++ b/src/utils/cx.js @@ -0,0 +1,12 @@ +/** + * cx('class1', { class2: true, class3: false }) --> 'class1 class2' + * @param {string} baseClassNames + * @param {object} optionalClassNames + */ +export default function cx(baseClassNames = '', optionalClassNames = {}) { + return Object.entries(optionalClassNames) + .map(([key, value]) => value ? key : '') + .filter(_ => _) + .concat([baseClassNames]) + .join(' ') +} diff --git a/src/utils/storageHelper.js b/src/utils/storageHelper.js new file mode 100644 index 0000000..7f3195d --- /dev/null +++ b/src/utils/storageHelper.js @@ -0,0 +1,25 @@ +const localStorage = chrome.storage.local +const ACCESS_TOKEN_KEY = 'access_token' + +function get(key) { + return new Promise(resolve => localStorage.get(key, items => resolve(items[key]))) +} + +function set(key, value) { + return new Promise(resolve => localStorage.set({ [key]: value }, resolve)) +} + +function getAccessToken() { + return get(ACCESS_TOKEN_KEY) +} + +function setAccessToken(accessToken) { + return set(ACCESS_TOKEN_KEY, accessToken) +} + +export default { + get, + set, + getAccessToken, + setAccessToken, +} diff --git a/src/utils/treeParser.js b/src/utils/treeParser.js new file mode 100644 index 0000000..d3fcc88 --- /dev/null +++ b/src/utils/treeParser.js @@ -0,0 +1,72 @@ +import GitHubHelper from './GitHubHelper' + +const nodeTemplate = { + name: null, + path: null, + mode: null, + type: null, + sha: null, + url: null, +} + +function sortFoldersToFront(root) { + const isFolder = node => node.type === 'tree' + const isNotFolder = (...args) => !isFolder(...args) + function DFS(root) { + const nodes = root.contents + if (nodes) { + nodes.splice(0, Infinity, ...nodes.filter(isFolder), ...nodes.filter(isNotFolder)) + nodes.forEach(DFS) + } + return root + } + return DFS(root) +} + +function parse(treeData, metaData) { + const { tree } = treeData + + // nodes are created from items and put onto tree + const pathToNode = new Map() + const pathToItem = new Map() + + const root = { ...nodeTemplate, name: '', path: '', contents: [] } + pathToNode.set('', root) + + tree.forEach(item => pathToItem.set(item.path, item)) + tree.forEach(item => { + // bottom-up search for the deepest node created + let path = item.path + const itemsToCreateTreeNode = [] + while (path !== '' && !pathToNode.has(path)) { + itemsToCreateTreeNode.push(pathToItem.get(path)) + // 'a/b' -> 'a' + // 'a' -> '' + path = path.substring(0, path.lastIndexOf('/')) + } + + // top-down create nodes + while (itemsToCreateTreeNode.length) { + const item = itemsToCreateTreeNode.pop() + const node = { + ...nodeTemplate, + ...item, + name: item.path.replace(/^.*\//, ''), + url: GitHubHelper.getUrlForRedirect(metaData, item.path), + contents: item.type === 'tree' ? [] : null, + } + pathToNode.get(path).contents.push(node) + pathToNode.set(node.path, node) + path = node.path + } + }) + + return { + root: sortFoldersToFront(root), + nodes: Array.from(pathToNode.values()), + } +} + +export default { + parse, +} diff --git a/src/utils/urlHelper.js b/src/utils/urlHelper.js new file mode 100644 index 0000000..5d37cbf --- /dev/null +++ b/src/utils/urlHelper.js @@ -0,0 +1,39 @@ +function parse() { + const { pathname } = window.location + const [ + , + // ignore content before the first '/' + userName, + repoName, + type, + branchName, + ] = pathname.split('/') + return { + userName, + repoName, + type, + branchName, + } +} + +const RESERVED_NAME = ['blog'] +function isInCodePage() { + const { userName, repoName, type, branchName } = parse() + return !!( + userName && + !RESERVED_NAME.find(_ => _ === userName) && + repoName && + (!type || type === 'tree' || type === 'blob') && + ((type && branchName) || !(type || branchName)) + ) +} + +function detectShouldShow(metaData) { + return isInCodePage() && (!metaData || metaData.repoName) +} + +export default { + detectShouldShow, + isInCodePage, + parse, +} diff --git a/src/utils/visibleNodesGenerator.js b/src/utils/visibleNodesGenerator.js new file mode 100644 index 0000000..5ca9ec0 --- /dev/null +++ b/src/utils/visibleNodesGenerator.js @@ -0,0 +1,124 @@ +/** + * This is the stack for generating an array of nodes for rendering + * + * when lower layer changes, higher layers would reset + * when higher layer changes, lower layers would not notice + * + * render stack | when will change | on change callback + * + * ^ changes frequently + * | + * |4 focus | when hover/focus move | onFocusChange + * | | | expandedNodes + focusNode -> visibleNodes + * |3 expansion | when fold/unfold | onExpansionChange + * | | | searchedNodes + toggleNode -> expandedNodes + * |2 search key | when search | onSearch + * | | | treeNodes + searchKey -> searchedNodes + * |1 tree: { root <-> nodes } | when tree init | treeHelper.parse + * | | tree data from api -> { root, nodes } + * v stable + */ + +function getFilterFunc(keyRegex) { + return function filterFunc({ name }) { + return keyRegex.test(name) + } +} + +function search(treeNodes, searchKey) { + if (!searchKey) return + /** + * if searchKey is 'abcd' + * then keyRegex will be /a.*?b.*?c.*?d/i + */ + const keyRegex = new RegExp( + searchKey + .replace(/\//, '') + .split('') + .join('.*?'), + 'i' + ) + return treeNodes.filter(getFilterFunc(keyRegex)) +} + +function debounce(func, delay) { + let timer + return (...args) => { + return new Promise(resolve => { + window.clearTimeout(timer) + timer = window.setTimeout(() => resolve(func(...args)), delay) + }) + } +} + +export const debouncedSearch = debounce(search, 250) + +export default class VisibleNodesGenerator { + // LEVEL 1 + root = null + nodes = null + plantTree(root, nodes) { + this.root = root + this.nodes = nodes + + // a simplified sync 'search' + this.searchedNodes = this.root.contents + this.generateVisibleNodes() + } + + // LEVEL 2 + searchedNodes = null + async search(searchKey) { + this.searchedNodes = (await debouncedSearch(this.nodes, searchKey)) || this.root.contents + this.expandedNodes.clear() + this.generateVisibleNodes() + } + + // LEVEL 3 + expandedNodes = new Set() + depths = new Map() + toggleExpand(node) { + this.setExpand(node, !this.expandedNodes.has(node)) + } + + setExpand(node, expand) { + if (expand && node.contents) { + // only node with contents is expandable + this.expandedNodes.add(node) + } else { + this.expandedNodes.delete(node) + } + this.generateVisibleNodes() + } + + visibleNodes = null + generateVisibleNodes() { + this.focusedNode = null + this.depths.clear() + const nodesSet = new Set() // prevent duplication + const get = (nodes, depth = 0) => { + return [].concat( + ...nodes.map(node => { + if (nodesSet.has(node)) return [] + this.depths.set(node, depth) + nodesSet.add(node) + const children = this.expandedNodes.has(node) ? get(node.contents, depth + 1) : [] + return [node, ...children] + }) + ) + } + this.visibleNodes = { + nodes: get(this.searchedNodes), + depths: this.depths, + expandedNodes: this.expandedNodes, + } + this.focusNode(null) + } + + // LEVEL 4 + focusedNode = null + focusNode(node) { + this.focusedNode = node + this.visibleNodes.focusedNode = node + } +} diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..1ca3758 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,67 @@ +const webpack = require('webpack') +const path = require('path') +const CopyWebpackPlugin = require('copy-webpack-plugin') +const UglifyJSWebpackPlugin = require('uglifyjs-webpack-plugin') + +const srcPath = path.resolve(__dirname, 'src') + +const plugins = [ + new CopyWebpackPlugin([ + { + from: './src/manifest.json', + to: 'manifest.json', + }, + ]), + new webpack.SourceMapDevToolPlugin({}), +] + +if (process.env.NODE_ENV === 'production') { + plugins.push( + new UglifyJSWebpackPlugin({ + cache: true, + uglifyOptions: { + ecma: 6, + }, + }) + ) + plugins.push( + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: 'production', + }, + }) + ) +} + +module.exports = { + entry: { + content: './src/content.js', + }, + output: { + path: path.resolve(__dirname, 'dist'), + filename: '[name].js', + }, + module: { + rules: [ + { + test: /\.js$/, + loader: 'babel-loader', + options: { + cacheDirectory: true, + }, + include: [srcPath], + }, + { + test: /\.less$/, + loader: ['style-loader', 'css-loader', 'less-loader'], + include: [srcPath], + }, + { + test: /\.(png|woff|woff2|eot|ttf|svg)(\?[a-z0-9=.]+)?$/, + loader: 'url-loader?limit=100000', + include: [srcPath], + }, + ], + }, + plugins, +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..2e2499f --- /dev/null +++ b/yarn.lock @@ -0,0 +1,3626 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + dependencies: + acorn "^4.0.3" + +acorn@^4.0.3: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +acorn@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" + +ajv-keywords@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +ajv@^5.0.0, ajv@^5.1.5: + version "5.5.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.0.tgz#eb2840746e9dc48bd5e063a36e3fd400c5eab5a9" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + +anymatch@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +asn1.js@^4.0.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assert@^1.1.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async@^2.1.2: + version "2.6.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" + dependencies: + lodash "^4.14.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +autoprefixer@^6.3.1: + version "6.7.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + dependencies: + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.16" + postcss-value-parser "^3.2.3" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +babel-code-frame@^6.11.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-builder-react-jsx@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + esutils "^2.0.2" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + 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@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + dependencies: + 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@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + 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@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + 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@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + 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-loader@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126" + dependencies: + find-cache-dir "^1.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-react-require@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-react-require/-/babel-plugin-react-require-3.0.0.tgz#2e4e7b4496b93a654a1c80042276de4e4eeb20e3" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + +babel-plugin-syntax-flow@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + +babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + +babel-plugin-transform-async-to-generator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + dependencies: + 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-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + dependencies: + 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-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + dependencies: + 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@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + 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@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + dependencies: + 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@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" + dependencies: + 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@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + dependencies: + 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@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + dependencies: + 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@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + dependencies: + 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-flow-strip-types@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-react-display-name@^6.23.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-self@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-source@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + dependencies: + babel-helper-builder-react-jsx "^6.24.1" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-env@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" + dependencies: + 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 "^2.1.2" + invariant "^2.2.2" + semver "^5.3.0" + +babel-preset-flow@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" + dependencies: + babel-plugin-transform-flow-strip-types "^6.22.0" + +babel-preset-react@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" + dependencies: + 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-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + 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@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + 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" + +babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-js@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + +binary-extensions@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +bluebird@^3.5.0, bluebird@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +brace-expansion@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + dependencies: + pako "~1.0.5" + +browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + dependencies: + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" + +browserslist@^2.1.2: + version "2.9.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.9.1.tgz#b72d3982ab01b5cd24da62ff6d45573886aff275" + dependencies: + caniuse-lite "^1.0.30000770" + electron-to-chromium "^1.3.27" + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + +cacache@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.1.tgz#3e05f6e616117d9b54665b1b20c8aeb93ea5d36f" + dependencies: + bluebird "^3.5.0" + chownr "^1.0.1" + glob "^7.1.2" + graceful-fs "^4.1.11" + lru-cache "^4.1.1" + mississippi "^1.3.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.1" + ssri "^5.0.0" + unique-filename "^1.1.0" + y18n "^3.2.1" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +caniuse-api@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + dependencies: + browserslist "^1.3.6" + caniuse-db "^1.0.30000529" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000770" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000770.tgz#cf68ae1cb8a82f6d3c35df41c62dc6973e470244" + +caniuse-lite@^1.0.30000770: + version "1.0.30000770" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000770.tgz#bc8e7f50b073273390db6ab357378909a14e9bdb" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + +chokidar@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +chownr@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +clap@^1.0.9: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + dependencies: + chalk "^1.1.3" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +clone@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" + +clone@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +coa@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" + dependencies: + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +color-convert@^1.3.0, color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + +color-name@^1.0.0, color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + dependencies: + color-name "^1.0.0" + +color@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + dependencies: + clone "^1.0.2" + color-convert "^1.3.0" + color-string "^0.3.0" + +colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + dependencies: + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" + +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +commander@~2.12.1: + version "2.12.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.1.tgz#468635c4168d06145b9323356d1da84d14ac4a7a" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + dependencies: + 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-webpack-plugin@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.2.3.tgz#4a3c61089f3b635777f0f0af346c338b39d63755" + dependencies: + bluebird "^3.5.1" + glob "^7.1.2" + is-glob "^4.0.0" + loader-utils "^0.2.15" + lodash "^4.3.0" + minimatch "^3.0.4" + +core-js@^2.4.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +create-ecdh@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^2.0.0" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.6" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-color-names@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + +css-loader@^0.28.7: + version "0.28.7" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b" + dependencies: + babel-code-frame "^6.11.0" + css-selector-tokenizer "^0.7.0" + cssnano ">=2.6.1 <4" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash.camelcase "^4.3.0" + object-assign "^4.0.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.0.0" + postcss-modules-local-by-default "^1.0.1" + postcss-modules-scope "^1.0.0" + postcss-modules-values "^1.1.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + +css-selector-tokenizer@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + +"cssnano@>=2.6.1 <4": + version "3.10.0" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + +csso@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + +d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +debug@^2.2.0, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-extend@~0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + +diffie-hellman@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +domain-browser@^1.1.1: + version "1.1.7" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + +duplexify@^3.1.2, duplexify@^3.4.2: + version "3.5.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd" + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.27: + version "1.3.27" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d" + +elliptic@^6.0.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206" + dependencies: + once "^1.4.0" + +enhanced-resolve@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.7" + +errno@^0.1.1, errno@^0.1.3, errno@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: + version "0.10.37" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.37.tgz#0ee741d148b80069ba27d020393756af257defc3" + dependencies: + es6-iterator "~2.0.1" + es6-symbol "~3.1.1" + +es6-iterator@^2.0.1, es6-iterator@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-weak-map@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esrecurse@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" + dependencies: + estraverse "^4.1.0" + object-assign "^4.0.1" + +estraverse@^4.1.0, estraverse@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + dependencies: + d "1" + es5-ext "~0.10.14" + +events@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + 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" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +extend@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +fast-deep-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fastparse@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + +file-loader@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.5.tgz#91c25b6b6fbe56dae99f10a425fd64933b5c9daa" + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.3.0" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +flatten@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + +flush-write-stream@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.2.tgz#c81b90d8746766f1a609a46809946c45dd8ae417" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.4" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.39" + +fstream-ignore@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + 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" + +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@^7.0.5, glob@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hash-base@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" + dependencies: + inherits "^2.0.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + +hawk@3.1.3, hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +hosted-git-info@^2.1.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + +html-comment-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + +icss-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" + dependencies: + postcss "^6.0.1" + +ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +interpret@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0" + +invariant@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + dependencies: + is-extglob "^2.1.1" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + dependencies: + html-comment-regex "^1.1.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +js-base64@^2.1.9: + version "2.3.2" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.3.2.tgz#a79a923666372b580f8e27f51845c6f7e8fbfbaf" + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-loader@^0.5.4: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json5@^0.5.0, json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +less-loader@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.0.5.tgz#ae155a7406cac6acd293d785587fcff0f478c4dd" + dependencies: + clone "^2.1.1" + loader-utils "^1.1.0" + pify "^2.3.0" + +less@^2.7.3: + version "2.7.3" + resolved "https://registry.yarnpkg.com/less/-/less-2.7.3.tgz#cc1260f51c900a9ec0d91fb6998139e02507b63b" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + mime "^1.2.11" + mkdirp "^0.5.0" + promise "^7.1.1" + request "2.81.0" + source-map "^0.5.3" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-runner@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" + +loader-utils@^0.2.15: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +loader-utils@^1.0.2, loader-utils@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + +lodash@^4.14.0, lodash@^4.17.4, lodash@^4.3.0: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +lru-cache@^4.0.1, lru-cache@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +macaddress@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" + +make-dir@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51" + dependencies: + pify "^3.0.0" + +math-expression-evaluator@^1.2.14: + version "1.2.17" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + +md5.js@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + dependencies: + mimic-fn "^1.0.0" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +micromatch@^2.1.5: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + 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" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@~1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" + +mime-types@^2.1.12, mime-types@~2.1.7: + version "2.1.17" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" + dependencies: + mime-db "~1.30.0" + +mime@^1.2.11, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + +mimic-fn@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + +minimalistic-assert@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +mississippi@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-1.3.0.tgz#d201583eb12327e3c5c1642a404a9cacf94e34f5" + dependencies: + 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 "^1.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + dependencies: + 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@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +nan@^2.3.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" + +node-libs-browser@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" + dependencies: + 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" + +node-pre-gyp@^0.6.39: + version "0.6.39" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" + dependencies: + detect-libc "^1.0.2" + hawk "3.1.3" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + 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@^2.0.0, normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + +normalize-url@^1.4.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +p-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +pako@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + +parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parse-asn1@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.0.0" + +pbkdf2@^3.0.3: + version "3.0.14" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + +pjax@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/pjax/-/pjax-0.2.4.tgz#0ae5885cfe663eb6a786156ed9c3de5bcb627513" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + +postcss-calc@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + dependencies: + postcss "^5.0.2" + postcss-message-helpers "^2.0.0" + reduce-css-calc "^1.2.6" + +postcss-colormin@^2.1.8: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + +postcss-convert-values@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + dependencies: + postcss "^5.0.11" + postcss-value-parser "^3.1.2" + +postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + dependencies: + postcss "^5.0.14" + +postcss-discard-duplicates@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + dependencies: + postcss "^5.0.4" + +postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + dependencies: + postcss "^5.0.14" + +postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + dependencies: + postcss "^5.0.16" + +postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + dependencies: + postcss "^5.0.14" + uniqs "^2.0.0" + +postcss-filter-plugins@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" + dependencies: + postcss "^5.0.4" + uniqid "^4.0.0" + +postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + dependencies: + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" + +postcss-merge-longhand@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + dependencies: + postcss "^5.0.4" + +postcss-merge-rules@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + dependencies: + browserslist "^1.5.2" + caniuse-api "^1.5.2" + postcss "^5.0.4" + postcss-selector-parser "^2.2.2" + vendors "^1.0.0" + +postcss-message-helpers@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + +postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + dependencies: + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.3.0" + +postcss-minify-params@^1.0.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" + +postcss-minify-selectors@^2.0.4: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + dependencies: + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + +postcss-modules-extract-imports@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + dependencies: + postcss "^5.0.5" + +postcss-normalize-url@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + +postcss-ordered-values@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + +postcss-reduce-idents@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-reduce-initial@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + dependencies: + postcss "^5.0.4" + +postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + dependencies: + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^2.1.1: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + dependencies: + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" + +postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + +postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + dependencies: + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.1: + version "6.0.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.14.tgz#5534c72114739e75d0afcf017db853099f562885" + dependencies: + chalk "^2.3.0" + source-map "^0.6.1" + supports-color "^4.4.0" + +preact@^8.2.6: + version "8.2.6" + resolved "https://registry.yarnpkg.com/preact/-/preact-8.2.6.tgz#0028b426ef98fcca741a3c617ff5b813b9a947c7" + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +private@^0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +public-encrypt@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + +pump@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.3.5" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.5.tgz#1b671c619940abcaeac0ad0e3a3c164be760993b" + dependencies: + duplexify "^3.1.2" + inherits "^2.0.1" + pump "^1.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +randomatic@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79" + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62" + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +rc@^1.1.7: + version "1.2.2" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +reduce-css-calc@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + dependencies: + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + +reduce-function-call@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + dependencies: + balanced-match "^0.4.2" + +regenerate@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + +regenerator-runtime@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +request@2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + dependencies: + hash-base "^2.0.0" + inherits "^2.0.1" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + dependencies: + aproba "^1.1.1" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +sax@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +schema-utils@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" + dependencies: + ajv "^5.0.0" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.9" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.9.tgz#98f64880474b74f4a38b8da9d3c0f2d104633e7d" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" + +source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +ssri@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.0.0.tgz#13c19390b606c821f2a10d02b351c1729b94d8cf" + dependencies: + safe-buffer "^5.1.0" + +stream-browserify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.2.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@^1.0.0, string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +style-loader@^0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.0.tgz#7258e788f0fee6a42d710eaf7d6c2412a4c50759" + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.3.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +supports-color@^4.0.0, supports-color@^4.2.1, supports-color@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + dependencies: + has-flag "^2.0.0" + +svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + +tapable@^0.2.7: + version "0.2.8" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" + +tar-pack@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" + dependencies: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + +tar@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +through2@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +timers-browserify@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6" + dependencies: + setimmediate "^1.0.4" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +tough-cookie@~2.3.0: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + dependencies: + punycode "^1.4.1" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +uglify-es@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.2.0.tgz#fbbfb9dc465ec7e5065701b9720d0de977d0bc24" + dependencies: + commander "~2.12.1" + source-map "~0.6.1" + +uglify-js@^2.8.29: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uglifyjs-webpack-plugin@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + dependencies: + source-map "^0.5.6" + uglify-js "^2.8.29" + webpack-sources "^1.0.1" + +uglifyjs-webpack-plugin@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.1.tgz#6167c5aae218ee8109de8920bb769b8acbc55d03" + dependencies: + cacache "^10.0.0" + find-cache-dir "^1.0.0" + schema-utils "^0.3.0" + source-map "^0.6.1" + uglify-es "^3.1.3" + webpack-sources "^1.0.1" + worker-farm "^1.4.1" + +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + +uniqid@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" + dependencies: + macaddress "^0.2.8" + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + +unique-filename@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" + dependencies: + imurmurhash "^0.1.4" + +url-loader@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" + dependencies: + loader-utils "^1.0.2" + mime "^1.4.1" + schema-utils "^0.3.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util@0.10.3, util@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +uuid@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +vendors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + +watchpack@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" + dependencies: + async "^2.1.2" + chokidar "^1.7.0" + graceful-fs "^4.1.2" + +webpack-sources@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.2.tgz#d0148ec083b3b5ccef1035a6b3ec16442983b27a" + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.8.1.tgz#b16968a81100abe61608b0153c9159ef8bb2bd83" + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^5.1.5" + ajv-keywords "^2.0.0" + async "^2.1.2" + enhanced-resolve "^3.4.0" + escope "^3.6.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^4.2.1" + tapable "^0.2.7" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" + webpack-sources "^1.0.1" + yargs "^8.0.2" + +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + +which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + string-width "^1.0.2" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +worker-farm@^1.4.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae" + dependencies: + errno "^0.1.4" + xtend "^4.0.1" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + dependencies: + camelcase "^4.1.0" + +yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + dependencies: + 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" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0"