From e2ac38c5c5c04575f77e3b6411c36768f40b7ff4 Mon Sep 17 00:00:00 2001 From: Thomas Parisot Date: Mon, 12 Nov 2018 13:29:55 +0100 Subject: [PATCH 01/22] =?UTF-8?q?fix(appendix-a):=20met=20=C3=A0=20jour=20?= =?UTF-8?q?htmlhint@0.10.x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appendix-a/index.adoc | 22 ++++++++++++++++------ appendix-a/package-lock.json | 4 ++-- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/appendix-a/index.adoc b/appendix-a/index.adoc index ffade4e9..caa6cd4b 100644 --- a/appendix-a/index.adoc +++ b/appendix-a/index.adoc @@ -396,12 +396,22 @@ suivantes : ---- $ ../node_modules/.bin/htmlhint sample.html -sample.html: -line 1, col 1: Doctype must be first. -line 8, col 10: Id redefinition of [ btn ]. -line 10, col 3: Tagname [ BUTTON ] must be lower case. -... -line 10, col 52: Tagname [ BUTTON ] must be lower case. +examples/sample.html + L1 | + ^ Doctype must be declared first. (doctype-first) + L4 | + ^ must be present in <head> tag. (title-require) + L8 | <button id="btn" class="btn">KO</button> + ^ The id value [ btn ] must be unique. (id-unique) + L10 | <BUTTON class='btn__primary--curent btn--active'></BUTTON> + ^ The html element name of [ BUTTON ] must be in lowercase. + (tagname-lowercase) + L10 | class='btn__primary--curent btn--active'></BUTTON> + ^ The value of attribute [ class ] must be in double quotes. + (attr-value-double-quotes) + L10 |...></BUTTON> + ^ The html element name of [ BUTTON ] must be in lowercase. + (tagname-lowercase) ---- === eslint diff --git a/appendix-a/package-lock.json b/appendix-a/package-lock.json index fb55de1a..2fd17824 100644 --- a/appendix-a/package-lock.json +++ b/appendix-a/package-lock.json @@ -2929,13 +2929,13 @@ }, "entities": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", "optional": true }, "htmlparser2": { "version": "3.8.3", - "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "optional": true, "requires": { From 5b435a6fff08e9cb8a4eb4e231d4f7bfa18e6cec Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Mon, 31 Dec 2018 12:39:39 +0100 Subject: [PATCH 02/22] =?UTF-8?q?fix(chapter-05):=20correction=20de=20l'in?= =?UTF-8?q?titul=C3=A9=20de=20l'ouvrage=20dans=20un=20exemple?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chapter-03/examples/json/base.json | 2 +- chapter-05/index.adoc | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/chapter-03/examples/json/base.json b/chapter-03/examples/json/base.json index f217f8ce..73c0bf56 100644 --- a/chapter-03/examples/json/base.json +++ b/chapter-03/examples/json/base.json @@ -4,6 +4,6 @@ "keywords": [ "JavaScript", "Node.js", - "Apprendre par l'exemple" + "Apprendre par la pratique" ] } diff --git a/chapter-05/index.adoc b/chapter-05/index.adoc index a75d9a0b..33efa36b 100644 --- a/chapter-05/index.adoc +++ b/chapter-05/index.adoc @@ -1378,29 +1378,29 @@ ainsi que d'autres, fournies par le registre{nbsp}``npm``. ---- $ npm view nodebook -nodebook@0.9.1 | CC-BY-NC-SA-4.0 | deps: 6 | versions: 21 -Node.js – Apprendre par l'exemple +nodebook@2.0.0 | CC-BY-NC-SA-4.0 | deps: 6 | versions: 39 +Node.js • Apprendre par la pratique keywords: nodejs, book, french, livre, learn, apprendre bin: nodebook dist -.tarball https://registry.npmjs.org/nodebook/nodebook-0.9.1.tgz +.tarball https://registry.npmjs.org/nodebook/nodebook-2.0.0.tgz .shasum: 5ea87e9b85782e23164705a49cb7bd2dc4063775 .integrity: sha512-... -.unpackedSize: 15.0 MB +.unpackedSize: 15.8 MB dependencies: finalhandler: ^1.1.1 serve-static: ^1.13.2 -get-port: ^3.2.0 update-check: ^1.5.2 -glob: ^7.1.2 yargs: ^11.1.0 +get-port: ^4.0.0 update-check: ^1.5.2 +glob: ^7.1.3 yargs: ^12.0.5 maintainers: - oncletom dist-tags: -latest: 0.9.1 +latest: 2.0.0 published 23 hours ago by oncletom ---- From ce89ae648dbab5ac94db0fef6134b0dbea6d94e8 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Wed, 17 Apr 2019 18:50:23 +0200 Subject: [PATCH 03/22] =?UTF-8?q?feat(chapter-02):=20mise=20=C3=A0=20jour?= =?UTF-8?q?=20du=20calendrier=20des=20releases?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix #343 via la commande `npm run update:schedule` --- .gitignore | 1 + chapter-02/images/schedule.png | Bin 31365 -> 52388 bytes chapter-02/index.adoc | 2 +- package.json | 3 ++- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index e86d4c6c..0997efca 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ debug.txt stdout.txt stderr.txt +chapter-02/schedule.json chapter-04/examples/stream/copie.js chapter-07/examples/framework/assets/main.css chapter-07/examples/sessions diff --git a/chapter-02/images/schedule.png b/chapter-02/images/schedule.png index 928b0bfb4e584cc85a1dc690d940a5c4e9c3409b..35453432eff6b7b1398e9119ebcb763f6b248030 100644 GIT binary patch literal 52388 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 KER!$^{=Wbt2*a=d literal 31365 zcmd4(Wmp_d*ER~z4DPPM39bnQcT13932s9O7Tg^M51tU*A&_7}gWDj1;O-8=T?c0m zNv`X@pZD4CKE9vda8Nx|b+4{kwR+V$&s9yBs`7IzbaHe60DvX`LPi|`K!5@Oz*AIY zc+GK+3>pC7sU$BW`Pv=0+xi3uz$HYI$bWP4g}SZ8kBmdfZPFJ3e&YZ82VC+icYD8U zK?g7$ZDOw7YnMdD^YFnEH8V5oq%<?j;C8CO4Z)JuNJ{>M-hRn?Nf6%yGc>B1byb<w zSlmCgS)8nnc7E}Eq|7+tpmsI-8gp`L>TFASz9D8;*!wWY5aGJtaiGdxql8n`GjfAW z_<UQa(|){c=iIi*OT}@(XChwftVm4IJNo(xhqC@x^Y#7?xR$jew%uoM7A9NLgo2gw zwRuvB#q=YcPbg-R({}gsd+=Q#%x~CU<EJFavnE%SMde@OjJnl!i(l7$@_a#GeU<c_ zcPDJVFSCBAr?{B??sswUOiTR{K^{B)RM_0^$=7Fh^{2an1NO4NGQ9S;`n*ok46e`9 zW3zD<iqBpJaK$SbRcxMCO&Z-zrrI@~8?AJvmfm%>3s*PKCQ-WG?2=u#wRqj0Y28H) zVr>M*PWx@OP2PCbP>5gME}zVM9W+sDS?j`%KR(j(+q-&HdUO4QB=h#sqbN5r<sm_? zrqj8_twlV~gqNW>-d~rGA(9@O+iOORS2K$DbJb3>z!0mq+p*Gv%|2fZJ=TK##(cgX zjUk;xKN_G<pjfhPa7`1sGrhNS689Og_waWbtfUFm{HA;MRG&Dm;=S40dQ|C=2*JjH z(A(NtOe&sr+UA<uU&GW-^%)$8Wq;VgKHTidD44w2tQ{`mqnNwj+sO30;;OTos9+$$ zB2jm~{l4`x`+!g1M0&;Kc0qKJaHj8-ipbS9WxXrqJAusaYmnkg{u|$~U<MV<y}5JX zU?r?AIg?jk?w1f_IBP`6h4Rs!jPH3eV7G5H=Dz&C29_p%LV##kBA|tFrJB!lSo8d4 za>clPlte)$H2(yH0mpXss`{XV_NRt$brX{@Rio<>N!)U{)5lvV?e;{`<lA-)lm7j5 z>dzvzetq9rX8EW^Per#Qo377NEd{ci4n%xbiae>}#*d!c-4TnIikHFkFq!03G8&Ty zk<jT?ahcPUoqg}B_oXejTih}PFWW<U5#laB?r8Z2oA1n2?r66^ds@C`ua(L-pT~>( z;ukK@)W@)8845vr4x^TJ58s$$YEhTt^U!KLkLTU*qbY^4`ShvsvB0f`C{+BvbuI@y zjFiPtCgbG%9_*aD%=$5glhwB&0<LFIleQABG@tb_@$u`|J6f{wFQ-Z$J=z`VW}>=m zs#Fm_VsfI^_ONN|+w!_dHeb3Io&L&+65vyH*_RhFIH*&;8-A6J|3(lR>8{8yg5YI9 zm^yF$7Kn9}z7qYFV(-KTy{(ML`+4hO2@jKRhrNf>M!MTVk$Fy3f}J*OC3m_KXJ63m zs_WGDgi70^-QEFQohl}qI++y2d`3X(GN&(f8B#&?ig-ZSOu*m7@ob#rK5TK&u<oW} zd4&c=aystahhcP-tLRru&Brat2~Hsh70=W$dm`t3ulK$^5t}sh+A{Kfo@*MK(6seo z`<FVSg95bs%aI#nU$O_(-eZZ)fvu9vv{sI>nj*nY{~AB@+d|VSeLGO6>D~di^rny> zgHQ`Qv%UQBrTwf;P1Q4s;^~@`9clUm29e4uu{4kEBk>;AUfmwL*iLMS(+J#n-F_}A z=ZZ7hYtB~N%x2!HWg8Lc^68*JCCF-*gYdhJ^>SHIc8~pgNqjk-mAeL$s@d#qd0Omk zJ&?=ajD~1oB?1K_!$7@KT8@h>=k7hdVk*hvFy_U1cZ+*BQtbS<V;7%yC+$6?)FmpL zvP-lNmk?qmQU!8bDE&@5?eLY}5!ayS`4;Z5ma6dB7hzoq_9hyJ<I|Y}<A^Wv+HtI> zFNCl^h<{dCk}&7dxBgj+LTR&A|7=jUzvJ6<)9Ox}7g9QP7rQM$iH~bz+UULdO5Czb zHv9Fl;^2MLjN8EvCvoYm$Yn@1leECQkqfLx*t@r8^EIo#%DEWO7Ni8HTzU(>QeC&J zCVxm4f$e_sBNn*NNuUr54UqO2x(iw5Aw>6kuE1qAb`T@#csuFgnqhbN^CKH3leVzq z{`A+ow5N%|MO41(doMdbERtb6QzHXV!n`;|U}Hwi?%~o-3BjlcOL}_M)-m4a1|qQ0 zyN13NzaK6$S_g{|30ee$*B7pK@6#{(a>k1?j$MfJeBv0t*fGV%gs}qcKbjIum+HV= zmwJ9=PVOQc^sz@S%k;SB{0Qr^y{leax9pXaM{V9ntU7ihRcTJ|!=JXiLLSEv5#A%; zcB$gWF2~<3yPhkcHt+1S|B#w)aaDo)v6)~md?C5q`ADZ7SRGhMX~sCd@d(WHw0sbq zvz_d<Pszw!BiIOWCfVHBb;e#S_9d>n=63>0A!pJ6_Bi)EQJv2Q&&OX@j;Y+J$fu(> zF22uJ#3C7~ciExBd;!uYyH1WE$xwSPdNf7iXMTM|FK)klX?_=85g8)H=S&{Yk?#xv z(xG6|zY&m}_!2uJmE4gI{1O)?Nm2sq^MAo0=D1Sp(#SMGYSp}}bDxmOPca4i7J`6; z8la9#k^MM%i&@Y@lh9=Uku3{EBKv)cV^X#KoxCW|LDm_4FMp}u4|^T@Jo(vjk3faA zHZjIvW(yJ)ht7z%BnxhrYa93eemr+6-Rmq7AGiStmAFD-k5@jVFNhbId<uK;E=&~! z-b~KtETbmgOZvIC53}$N$W5rh_wkn83zBBxHStv8J|;!L;qx-hOJRTCUk%?IG$g-2 zRZk3TCK;fRo$h8|p7$_Jv+S%<$d=v^x3=5Y^7;h*MEMh{{EH^y1_9iJfkxFX8MOD} z9aBZcpxGo}3mMTS>&1lA22!f{5k&{cbK}DikNN(Ysan7C_k$5rfrDSOVL}K?W(ApV z7PNDsvL0vY!iHE#<9d#ZXR2<c+k-76)UWMoJ+&L$2Kf&SDxA~-+h8>^Hz8AUU>RS< zP_c4`3>HO$t<7k`s6;!kVfLu;?X@Y5sRh~Lj5T<w<H#y7igE>)CG_21*s4ZrSR{R@ z%Jn!R`YBc-N*vu5nT6ij6GHBuQTwbx2LX9>vgl{@UR-I{EaJTd*Wl%L95J(6Pm3=V zsA!<2o&zbsZd7_l^h>__{ENMe4rNSgao;HC;Sc4Xsd)7z>RstBlk$lGBo7Mx_OdHF zkhzPWLgqDht{GF(k#Xna7s$DsDE+l34GdOV;x+<Vr&M2gE|fKYnlB}1JWE@^3SF?5 z+Iy*2Zq>M4wicO~W&PAocv!}i_LuPZ(EZ1~*dgV&rkNV1pIb(yh)6?A4DRyi5TPTN z@qCA%swZJ63#AF^G|Q19TY9W^(TYyvDo^a#)t=|CPpPu52#f39cbfO)BR<wGdd`&7 zp+#nSzi7J)NOD8(O?1qCxBkAE^ilaxH74hM^7#G<e1RFYS1na9Wqi;Z-V1VP4$q5L zrte>3cWX1T`b_qM%)Hl<2*#e$_nF5{l4IYM+Qd-Z8MdRbxK!2ce=;Hbq)yx#uLej9 z<YaYiU@9kwTN~d#>E4w&e)5qUz*%U`dd{CF7wt^OZ`HXkJ;{0NcxYQNg*G9%(s4}L zlaIwjE{(0A03tHKvn@RpT$r@i$?h+G5x!kZz>wFTOfw^_bb8T?e%gFF8}@}M;sZOv z62<O`jdw|pV&OB+#*03q6DK?nxQcqv$P!r_X0hIskp4a+{@Y8ZiQh`upu3jBwW!67 z$9R$bfu*F1MYSm!OBpdl7l9U2s!C8pwTFR^j~j3Yn!W+;f|=>!1qRN$yQnV>uvoK| zQWp0Y7@xVYoas8M8lfsG`!EoV#}szAE~=vDg_%g4>m7WB@UWd0vr3w*KX0`w>nwjW z8<KhAl-?B&kF{t50RkunuWwvc-Y|X8_<)BaKdt<jnm~ghm9Ceu!bl~9|N4cyjN+j! zRyDz0AM%a{*2c$riVmn+dt#-WrUrlCcF=%><`UZlL;n=o9&wS*vhJ-&TKeFkGOwsk z&|4zFhH++{t&NA3FuvWkdBZ@)mD-i!(1xSG!L8LdJ*}H8AJ=zNVKSy2{RZMc8p~xG z5@k*0g9w{IhU1r&$W`hIU#Yr~LqWl>c6JTOFigK8k>x5xzeoclJwub7E#ROyZB7$l ziypzQ7-(&ft@cvNqf*442@!uSr@KpS)-3x>(4sod@o766Uoq;$-rInlNO!|45oN5U zrTo{=ryCWp72Pwy-!T<*#uVoONxN3D00HX1+OUWqXQ*PC4f|!16K?X#Vmj!yUb+Tb zdPv2(Gv^oPPGO*%)rWNGe!g=}TXIH0FKv)t7npyaPoN?zk3}b|(rj(FSB@JapG<I} zQuhsc+sl*V8iJR~#I!C*&}Fk%vatAool)JZFG0l<85_ZcbVFFyo#q168Oe}&an7=k z^n93hk-9h;Ji^H-#tLzosvX98q^#;x8bvv^Her89zLdA4DQZ%S>++5d=ZXF^0b6F} zONW;1!1Yl7LcS7o;R-NE94HyR)h43sdlhPsg1!Qt4)YeIvRz`l;Tbm|nggXffd*<1 z`9x~FxokB4D=QML4WbX#Z8as%ADhN;^m$$J#RPS%`kE{AUgy5a!>lDL$5gc^$FS{g z&(4h2+@Id1mPsCv7V+T8rRQCxDwj9&(Yu^-t>Atf?bF5(643-5i7uaU%eqcG1KAGF z{&n@?eC!OGAA*1a5|)<#*cvX97dxVSvQpMqvI8zrF7uOqCrcZyJ<5_Djj|<bqfagA z7LFCD1^56SO&s6E<y!OEqtD``nnOghTH(#w{Cc@-UKBWA5mjqtVz=WC8+UbG+cM+7 zl_S@VsUVLzIHBo~p@kQtQHDnMs8KsBq(`i=dAeq=I#EJj()3Aro3<xujI%#cFnZn= zwD}(G)<!5p0=PMarn;5g!?an98JW+nzab{d2)=Mo{*FKqG3&vv@B$OX!1J7<>)@8M zBm(kOO`VWgYVYZb^<>x(XKdpm6yHbkl&ST<vgQrzV!rL530w%~JmyWHApCja6G!5h z7xz4~JM1UK{-lUFeq!#3Dh;hLvkLjWga5~I(Vi>W-mEy;rl3k41#JrxTpQ%r$AE#C zBt$Lq*|x&VgRw^oMXuIfF$PNIXhLi}KEil@N{3=jn(Pg2N<j+f9t+Q|UH#|}9;4*{ ztU$Z2>Z!7{o5*$$N$Nyc4cg|QFHcu(lkb(jGs2$q4Mb0NO&5;grpV<$!H<m;<a_iB zRSt<8@goJEMQt(EqomrHaaFjmkH9rU>}b3oVm%X#_4S6SU2?%Shoy(^@o75d*C2+> z?9eJc-n0U)`qChkwga@8A?Y|+4-SQ}&o*}ZS`=S~IuYe_8RZQA4et1--o(mj;}rzH zXLzX*vFzV)HxsYAA&5q-%i8EzjFKB!(sHKKn}o}^W~2-J6bLT&c^F0~lPsj19S1kG zYCH(c{8-5T*`>Un@mHv$K+Jgkzh0mbFROb*gE-owGDS@?XY{6(;<5>`6eNKlGKF@a zq(M}2c>UUt(-L%Aop_sRG?87%Mj&R&5qh|(%_I)__&JTp@wL4wCP~i8YHesP!XO7j z*TnrDnJYzxtpM~0^TE``xMfJQh8#BBx&8Eur<+bper+N_9cIMc3|^19;uMT3f1h&L zzDR6`C45S1PJb`Xc*DaY-FC|n&YEh!VYVROnwWvdq=U@@EMI=Gd%vI$OPES8G_VUL za20Bo^w;sg8p53AlThEv&5ar6*RH|Uqf=@c{)>ah)dW8hWna?yFj=E8C0wk&IX})L z5m0{)ESqWh*&Msje=jP|24+Kdo2^>ASU$j5489Y0y*f<~Imx$V(jF~>eYqW@qRsPV zMOZ@i=k88$Iau^V1~H_X)GFAEcX1At=Tto1o2l9%x#Pt0Jl*2?Hn;?IN^X5N#{}$Q z`$_ug$*2->_=J7H`InoXSG$?Z+QDA?bzdu&D>_PqKT0mrN)vy1^7Dy$9JI_e$WO~( z<|7vpH08`B)E1*wjurRk;Z<(Wic=g8$70#O?9;M%%xMF+c^913fZ~$nipMVv#)3K} zL|p^=y!m@3bzLo{XYGMovtcS_zI1|J+F)YY0X@?9qYKScZHCUf<1R{td#QmG?p*j0 zKeJe-eL>*#N1TsJ=&>pv`|14J5C#e(jGjjZei1_6t&g96Q)v1^muOn0jq8Wl2kp%# zVCX5iubPH%s~3Tlea!O6$|nKF6#c_j>iA|Ke$H6+OFv;jQ~aVZ5)9DJyYHD(Nqc71 zvaFzxLf`k@N`(0`fo56LP>^a-GnO^);Fp^E$S<ne+#oV!v)5DLkP*ywqEvh`!+4s6 zT%5{nX}Ks*2t6|IsJ8lu{%|q6tCVm&aVmbasa2y1vEp57lNX?h2Xjf_W}>apnsai5 zFfp}hZOycX_t9kaftruUd4-v2YA?ki4_i&s#*R<n23^L$<!RCVo~LU7btBq6($LML z(iY`H08Nl=zh4+W62x!o8VAmZ(LjIzfCK=}k3j$rY#I;~UVup91tPbN(<?6FbtWxY z|L>grDw#H!=_16zycVgMLSuZw<7C0k?>E}MRM!=xs=bKFVJ7Z4ILH~ouN@KNZxTf> z;MS?*<@cdM?;etZS#b_17l&<herEplC6|i=$PU4Sf=K^!K;nKY3ur$;<i1e=w3i}s zgGdp%QNg&-4@kgBKqul1A~}HtfrV1m%d98<0|5Xz06heW8>Ic`Ab<fEg~>Ps24OJ{ z{k{Sji1{Gltt9+}C;oi?|47)RNRpt3bkqKiyGH^TV*tnm7To^uLIUtf8W0HhEdUq# z3lEwkkt$&VvH?Y*eMjSE96|*<qJk02;61?jbAXGZhqNM+D`mk8_!YQN8i?eB1VnBR zL~h0*#-aa6-~}a7{P(Ewps3(uRPgT`!wW=i!9SyhPYF<8>QociXfpisj<^`AqP$hs z%qZXMEuqz>7v^OXKDjM3vl~q>tcrb&-Hcq8qG5DR{BD{hn+2FHCx+ic78LHI!sKRs z4`hW9;+s3|^KO?C7ady6zBqbI8<}p(uT0{pzc*seOI@ai&%Jyw;R=bu_QO{YD5(O8 z`@t0C9xMVr)c?yLX#e-7KP?~rFCq?^&Idqz(F}U+aAx(-XZ>wkUtfwox{;Y#%I0Oo zqU=F&#X?nEzC)7nM4@O)as7Nrq&X%*>>a&NkF&;Pfh|T$TH$tzf^1!UxQAN7=KQf& zxw`mwj~7mOQmC{+xKhkeLNNN_viNK7i@0!9XBDozeYT*v*<Ra*q80l67b|r>iSbe$ z`^r;PXC;xZ{M$DYHgIDfk(^N=n-9#uWN`Se`(aPoO2=$G#7m#-+vkSkc(hPEdpRD@ z7~j}PN&mhFDpC?Cjo)qof9Jf(-s+?mW$cFIk;$+4r+RX{HjBQ<SNs%nUM(`y6<CNn zmQ3CtZ_1}6`ViU=u6h<>5luH)X?LeN3b-}0st1NOrKOFea=?rv)$ewGVdpdlq>m5x zv+vEi2a7UOaeog9-QF<^P`cQ1J<u6=ee=j@4z_q4&sIas9wk%1#g=$0jz|g%dIgCf zWKqvsocids^UR7*p^S<_B?v&DGxPW*#3ym@GRJdzkBW@?q+DcB=2}SV)vJ=c`BH{U z7xwJxYk#Jp2HC<Ohv$eQ9m3mlEjF6lGp1gf^U?+Q;ML@)4dn;D!UwJj(E%a{GAg^v zmhpagjapFxNaQrCF9!z)ZoBN9OD@PqY}{vpMHMngfzc7zoKUmb+n;a6*w&Tg#tADt z=1ZyGJEea5=#?WnaPTr6u+#WQDlWQxEt31V(|&|zhDaSEhBM`qAJ5E7;6S>tTS2*# zfl=}N$qm-LxXD?#_+ul7RuH~r0~Td%yT@Shv!c7W^WC47D>|^?{-0jp!6pXbn)Hk& z<0=xL0F7ejt(g<PZ}&A+{5C&gf2IjKtrM}U*4g$`kuKT{L2Yh3qZjPNyqMwLmAjbB zM!HyW@$%cln`|doqNY&%rqUF#^*x`79%f&+Xejm)$oQwbpc@&q!@`ZsI!wN%@8Tt9 zw^z4_igcqnd#N#{^Vc{1rf`DVjnltmv9bHbi;Xs$)adAR{*9vXhRmjro#B$?OjKfv zp~7**@5VQ^mrl(gO9MJB=b2OH`sH#_oZ602cV{T)bHM-=qw-Ud(=|5T?@tQ{>V-t? zM(ZtZLU0xRJX;H=^M}FTfg2R{;xZz>z-W)*1R3phyJvwIWiT%joZT)3k2Wso`LdSS zM&)LEBmN-ePBq(4bLA<MH;iB8ATA4slK)yU<}js*<xSCtZnY9JY7F9YgjLUrK1=F8 z{iYSSuK>lj9Ita^Tv|atdgCnLdl~F#-b*WPe&{AJl-8?hMW{hfkdL3KYRLB6ZJahj zPe6`0{a&-R;8G5GZE0YoB`dh$hHej|4Xnn{eCiH|pEf2N5*PQVoKWb7m%ZISnwvY~ zl*rBY%+8U`N9x&8gL{FaIfq2kJ~S_pl`*rqL?NK2@1@UtC)eZ#^N+vUPeW&hD$dOg zCKRY<GZa=>or}0p_D0c`<)dnqXngy`l9iH^r!a0aRlk<&Dq7FcioX><cu=34NXvgP zXN-+VB>22P=`MTDXpzcFarYwlL^J?N)kQ9kzu9NM#^*VfU-RU9;|5}zMMsd$w|X}n znj2AK6lXNerye&Tig~u?z4{l$(L7cG7~BE@9#OSB8a<zMfqaF1YV~yUa>r~Z2GW@m zn1V5`d4>>#AMqp(Mm;otJFW!mywllj3HFxqOm%s8&{kpo{z(GE;B4)_kutE8YW|0C zbw*H-(69%hO#Slcm&VoIP}E1gN$}?YQa40}`o8)Qrp?|$T>SR<0!h0@)>@f4>gO5; z9Td76EB2Y(Tm0!b$eP;M1(E3m#?uM<`wXF-{B2I`wCkBJh1<u2E_6?giKc3VT|nNq zirvC$1&jK8;@?|+SOWk07;Yre3Jiz6u^JfpSNk^}PjU(06eE$oi3sPuIwJc_A?Wz) z6Z3kXi6EWda87(#r0#}{sWvKexhLlf_cLUd>mC<kS|+GS>n}k;ktZO`H;vWY3pa*b zF4!E!e$7SrK{YRXkS<WR6csL-{GGaloEj)JOg?V^e2rQ*p!mlavjL%c5Da2=?Saeb z&nrJ7CWGRH*r1+~hO8XgKY9p@g0B<n+|s0fOi5MjPGg`Zm`#1}wi7O@9p4_?Du7{O z5Px_P5m@S6rCkO(`h`)}TN2cXNB~xS)iGHbiOK<88kFwD-zG#aGg!l-RI`!Vhz^r0 z^3}=!z5M$uTpWEWQq8WwHM~WmMP(K<N3828=nq&c2CSaQ;?DgLuE}T<6&UyEh}=5Z zAxQsNq;p+8ie$C<E3DK+#eQ*^-ffkJ-ACOyaJ|0^HKBz3^Ng@_PY3@jY_}P+E`5>8 zu*{>~Zw9tshwtTI{;S?$cH&cT7Z-Fmx^VAfm|4r}VZN}yvS1Qm2i>{{QK0R~{%Zv! z?TjCG6wao{8;R#4lZIab1b<dIpzjs5;tk$t(SQnOcAH+k<C-S!Yv4;u+LZjmZBgh; z;p)_ayh*Wcj{&U<tb$-AH?k?ePx~mi^T5^4W@c^j_fM|URuL&mG*Fmc33r(^%h~9@ zBxLuN+bZ7&M%%Lqd(*vd!rvcm`WAI8b7(rO98D=N1DR!ZSu0lGkP-2Fx7wF@i2F_4 z>WdQN=VqMp$eEvkuqf^snjchTk5~?TJ3gvh9_fbwR>hIt?&1IslROq>4Nt`O5&k&P zht-)L=_6&PcuxX{o-uH8OCg?Zl2;`|gaHXdB13JM<8`Au7Do*uuI;ILe`ZTQSdc}( z)?TAeEla}xIDm*zoeR1YIVcdN^Z2ZO*wyUi2oh<Im+%JwEa3SJo}0lw&&HkD+W452 zTi<OHO>I`D{nlLT>N%~`wEH2HCuHDJMYz(x?oY}3wYI>=q_NAWgQWn&^JUdgFQft3 zXoPFHb`3}8WNDEM{rT!rrsRmzm9rRAglv94K?Xr<<@5z(8GQ{I%m>H!^VFjPDY;@{ zcSBRnZ0Y|vR;AZdhwsZg=IN?ZgXi1GIdYeg6#f15*qv;mGY|ZBXMmxE#uQygp>YcF zX*n=l)dN~oNR}I(gk*L)3o3L^N!Td}$-=Fg1dka+B%7;H)KJga^{fNLyqSD`fI{u+ ze-zr4xOgH=$1Mf`;6mTxfFGjw$cG>v7amytzyI;{|K9Ycg$CjOLqy-=wNS&Mlb^$> z%l);f;cnlc_tirB-6rwn&8D)?R7U3Q3bDtYOV=Xj#v@_dCzzS$Bsg=%qzRQ#drd#W z+-yG%*6hzY)(BtT4f-`s-sn<zRi<Sw_FrOwE;3bl$0M%yF4Vcc2{X@Zn>{I@I>pxr z*mCyFwJ5wb%u!I~Tm7c?YH^cc8xh8sn%MircS3Pz-QHIKba5~BH)MYR1Y}ib^NvrO z#}$9kLPCwlCbS~Hc+M#PVt}A*$WM<=dWPvE9^$%}qDTXt|HT230Ajel;KL?{W0K!- zyiyhrND=&i0v<pJ4Fsv|{{$g&|Nne-$p3fG>Hi1(VTU8BcFd)tqKfH8!|&rn+Fp7w zwqB~gAr0*=qAmbqX&a#J(TEO~_^suK^HITnpx6VlB7d-#-^%+}hY#pWDT}t}0TBIB z-~%FhP%`enc<N;w8t(&a`)@o1hjeh%mLwq!Z=->C@-LG54HIep1#&6O1Qve~;y(aT z`vHu>JH_oE0&kOm8^Lb`1{eNd5R!m@@tfKMfO|OeKM3wmui(&8l5q$EU^D}?w=eFd zBRN0PB9{2tr{w<>z7xbGDH;B$QzM(NIxn7!uTlGqOrG9jSjv)B9sY^6pa`NFHK9XR z^|8wC-syC2@?+=7uE58bL9dOu)ps|~PBuvF7OxNVY`|R1K@^j&KW7q9Qk~Ml^A>?I z9G2`*%yv*8_n!l3?zQ_;!PhHgy~-6>Xog2&riA4?QlgL;rzTYr+MgBgV&-?h0mw8^ z9C^E@&k-d<YG`=E%(Wn&&+EvR3L*`o5urIp1`RcILNSe-8&8KwXuTN+XbT*+tBw!8 zclmKCV#gIN%12ED8LDa)af~`5pHvWUUs{9QvOwDr+s93Z4$j`OJFTETdo<oe2_Ah= zKf@4aq69xs8xlic;|aSVy*H_v+{9Z%C+x9-&7Cmbm0S<e`Vle9Z3$%AkuMz7@f)T- zR*f7gG@pcR_#GQxgj<#RNM!LM(kYV(ndpiQ92HC&kuj;Bg7qOVgs9m0RNl^+R%(AC z;JMm#&eRfs3}sEW?CEl4fxEec11dLf9`>|%RzP3iPmh(X!4APqT(D4eKwmPrJCJo; zxIo?w2@*1EsTuX8nizkSn13KxhBP2laY?ldv#{-#ih4&VzVgCHq$EpwpqVy=j2KJ| z4nazS|B%*Qe?$>RBkWGc5gh}T!pOv3KS?}67c0s}tTo8Y$n3j6ZQm{`ZMib`AHi*0 zC|E^LTf7(SLM8#DdMvLBtSU_>ktwl5za(M4A$6Q!AY2kRgGgtwyq_6KL}rYrONck4 zO_}wsa{5^l;g!_?R!O&y!f}&SNZIOJk7(J`Xh5P>7+v@Fh`_N|wr5&-l|-L1>PW$r z{-JDRg+(GtBZ@w_%}Qu85Gl#H7BS`TuPzfibab-hYO-!4!z)`tl3W*}=W<Yy&|_+{ zlF)GAPP8$Rk4Q>a=3-L(>laF!JgPmpwI~J91u-H$1YYm^LWSK&e!=LTR7jH&MW4?H z)HsYao)!JHEOkp@)ykNSv*?qNol;%>-7_9+4DR+a01xKxLnVM-R1UKWo$zr6AVL65 z)^&l2nxb`)<6`&oPl!B$Z|z|l1{Vo4KHgUsGQJ_Y17X{v8zZ^?)U!%mPODBVszVY% z+wJYOyVQfG6D)sq>e6bv28*6T)8<~TmK$aNfH~iTrUND2^0zIGlYOv>n}+H5ep>?O zGlv1e4gDaKqx6}xy%UdBJTM`nd0+Dcjl>&ZHSt8k+?87cl)B^-Uj!a70pBeWNk9>f zRy^jd<qaW}&6~Z!w;x)V08ekk)jsmo6Y~k+CVUPAN3c!GO~BQ<jBml|ZwA+`Vip;v zzb&W?K+RPa=f2Q&aF61rklnP_+^|U8fm-(dRftk%Y{cZc@2R0iqH$nLMy+=_iTI%B z{rt$up!hwjWYptc2PyWzrmpBK+w*Iy-mz&7&lWUAlDiqdo234WF6JC{>u0Ko5}!K^ zBb}g^I2n9f)Cf!}_5-&Ux2ie#mUv7n*UL^umXl_!{ciK;>V-(P^&>b7U;*2NC-ZAD z(P)sCr#UPc6QZs4kzX#XN!~EFe@e~PgNV+ew^FN_eu*(fo{G(-NbqVcZ%{TY!f7xz zl>&b0FFhp2cHlrM<W(HRDh?)s(K4}?PSjAbLnDFz=cAA+|IBJ)cjAtq%eM92{zqS7 z4zu~<(UOl%0YH&9qukY{TgN<oTuGI_;kGm8ma5d`6Pv%|&b(U-Lsz=b`E(-cySHx8 z4hL-3#A9D+bER$q=AWxvE!^P?iWq79HUTcT{ruuli;r5~wo>`WvJW=iZOhy&lqHX% zBRVP<^aHf^k*@iue=--&TfGa(QJB6IzzOe>N7nv)IsOrP{&{lOHlHyzUkegZ*<TiG zX3#$M<dPJPd*BI0K%pwfiqnU;ZrxL5BuZ}#EL<lVIC!!Fe#^&`d-Boy5d-2BVQf_) z6QGR`wKvmH&rSHV|6k8j3R3ObxYi<vLSkvsNp=C~ezi*DV4wO8UmSYb?#hksSJz&| z@LvPh2X=vz<sCX|ai2{2F29wePoff{x!QhlWI5osTpK}HffX(6PgtG}!AG>kQ>BV= zC`)26hF>}I>?BF}x(g-4{d=fHK}=Ce%N<@HpGkslxR8QhPlH5g&{#4h?rU@GNt;l5 zh#KuLCWLUQBc!RgrbOO%3ZIXa9>2~6cws!vi6uoQYZZ-#`<}h`5(&>-*?Ts+o?Lqb zg88j5xD7C7L?TKa?HyZNaJ&bQjP^B<2ks1$mfwr+z%pU(=lAO;f@GPWjKguL`dH_- z?hb|rG23r8k1is@{pMXxdD^*Kb{A`Gu1gF|Su#Rn(W7_T$LLsi%9ul#%U;W^`5IHu zt3FmwD-TO>Y(?6zjC$qfpOCrgKW*Wk6YRNwn!&>kV^l0}&X<iyMN$wE!rFwzQ$(zd zYCnxK9lszu5VgFF^+`h0iiIz7O1T3vJh7^viIj@<ihP?otH%QbT97RmJhKgczK%&d zW(l69%ze(jMF>vTaFP1p8c%Fuvk*eO#9dpl_n~<hJ3-gFmT?BeUPh8wP%kLFiq731 zLOoN5rkT=z_{6oS`e%hj-MYZSlI{>@*||r5$mHiI$Jyf*!#DF+r;FHB-f8lbJC&8s z^QP|-Qm^W`7Xnc-Zv;+uUaThJoaF7L?%GxQktWs)avOcSUvE$fHPL*x(W>3NSQc{c zGcPa|n>u@qp=YKRzLA|9uzJN^^<w0<0pA7rBG_#qg+=voMd0xT0|qSoAd~ZlW;%-| zTv4zc5qD^&16RqCJ|ctejfmoKbdrans&=N|$r;PjM<Vt;9qj)2F(k9!Q=(#p&06Q^ ztVe>uJnT1A;oST3oiO=ez~`~#7sx}Ob|irG49#S!#rWWg4PJ+!qeh)uP^7nHPbF<F ziDRQF%M5}N5^1?VzkVX^S*^ZmjwfUH2xBC|vmI-Dj!mj1sOthk-yzkK`ymxL1O_<y zUBcIQpT_r0u^R@i(^W~s8W@M4xy1M}#Z6Y(SVPj0&lSH?=B|0v)35i<`7;cI)?yVo z>x|pro6ufEsNHXlGA=x}3)k**ySUU;BaggSx{Tb7YppAS^EbXBE7q&MF>h>m3X$Sa zjg?fmBH(HkP|w=T@<$>qwF!`x2z13Cc%KTaev`o84Q={yg+wZkpv4V(tnP}5PXvCu zmOz(<=Ox~E%t*FI)mK5Tk1>suG7uOe`Gyoe4(^9_2|gJ3b6T%g!5;ht6gd)M`orC3 zuFa#t(E98gbN7&4@k?H$q32fKWH%;zG_|1J7YtKgLy}FrN^|QjE9N;nXX}=mJic%1 zZ%E8Vq~uk3kc0KoJv1@6`4-yDov8(PA01s=UMSrtmp-AN#E5&VmT0+?)ryovG5(o# zZybL~=`h5kf%cV>6mF5coO%u5laiAMJt5d7BymB-%)0840j(L`cjKQr=H48eg3$3+ zI_~m6>*+(J_elu2?gS}lRFFyIwde`5zQLK^rw=hhC;ZhHF=!o4`RS-0v9g$d-ea~G zBpWavmxoAiLejs;VVb;;MeIPXz}95+9pf|;@fk?O?2dxp(CaEniwX5zMVshztQs|7 zXNZCGJ=at3^HZB+@0GV7K{tn$Dmb{zo&v<6#*r-`x$Re-SCE$jO*EgG^`buy9Sl1; zondglxn!}AL=?che8dBN+YgD+Na{<mk}V4q$5(;$FO>w%D9<wP)r~kMMU@68?-O;J zUxO>>Z@SEFogq6CxP{UeVxAM9(NMYD8HV72<G&GP8GzrF)7IlCD$&6AlJYEll5M50 zx3q4(wb!opiWVLZ<RF~n2~<BU`kzck&pPCpe>gmy)Nb~{8o;O=0<8&*d;lq(Z^Yuy zl*Oc>Q8b_kh~q{#wA6^{2!9`?qR-dSyu#$zia<B5^92qlFhge?5HqvuH1V&*5q|Ml zp0J(WEqEdd;R7O;tDu*)Cg)~ap{!YrPam(#&;|JIJAZplfcqyXGzOaeT^bofv}UU_ zV)6zDTW;5#`#4P|&E`tkRmp)NaQD0yWro^RSZqdK%!~0Rh)rrBasD-%P3YTDbB;b` zX0>!Q>z*jFN30MtNCYbZ#d2i{cL8S?^@gYAgwFMCRbXS$xvpA;H<83*cLmSY#7F!x z#-C|35rN-d*Bei?RiMrJKOG9+RwZ-yb=)+FVWfe>19%Mn`xhROJ^6VO%us8joyAKW z`w<kPW7&<UXG<mEm=5k8@b8~arI~-Hd^-mZbsv^G_<_;%;iC5fM}<2jUZ>|?2R_f8 z<C_h$cp2}yN(|m~;~}e(?je~{HwETH6y7@j4AKcnoedIX?d!{L=fg;P^{U-Eb%6*L z$L6?rnOTbfw1(%woIC!>#vySBp!^3(J*31Q@LT}epNtk9w*7@+e=yfSkdg5XC<?$x z3vc{4iH8S$`v<@M$-w<r4vp+V;(u~~4~f5juVaFv%O!a817r+*K#T<cfK3FDz(Wo% z@=wn0Aq7YOr|~aDg?GsQcZ%<C)~-GDcJJyQVee}1*pr3I`CS*{;pQJsfgO?#@Dmy< z_{OTSS?YLRw*xM!ZhD=~rBq1F?Jo!TH#hhj-Tns!KlC${1a(Okj+xPTlO+CV=3$Hv z==8r+lJKM^{eyn~gJtO<zbk%^366yk;ZpzRGi4s&^gn9+lhfQpg#+mSA}~;w9xDDx zhT=Zx>hC1rJz(blXz~HN3;nN5>O;lv4#SJzcl$FHzdP|y67_EyHu?df|Eo`UAAVQ- z&cT8~>43iq{xf7AXTEfwE2pz@KfOZ!h^pHkAsEyp){TeDQhphO=ZQZC6iZvg-|06v z-%EV0u8!H9z@ge46Tc!s$TH9~B0u3mmT5RIi7cbPlclaw$xO$9D*+FRnZ6yB1Nbs` zr$NY1CCZHbeFsqXy2#ap@u6RT>;j(0#)YCi^Z|g#O#|V1un)k43i1A}g=;JAw}#*; zaFBrigR0?q@V~u>(`j&);-A`wN&QEJ1ORS*@H{Op6apA{;3*Iu2nxA>Yac8O^}%-G z`Sd^L5AVTmZ5d7rcx?d3)?*(p-LIuN!9mXN;s#zCPXd_)Gkc$t8Kl<|z>0-!{09p^ zu~?V+w_6RBCn1rM1-g(XTVQA$@TzcN1+JseiuQ84Y5A;;mtJnz`5x?hQHzf9R0E)z z*dNw_+Lc&f%k0{9WcQf7NVspq78;>7X?nyLM<{JLOl)s6fbdlq<>`c()Xee;6)D_b zEW`Z_d|?GOf>C60tn~(0zj^}5rNQKvKLCnul5^#qNQb=>C7DObmp027HY;A0H+&$( zc4-^lM2{h!r1sYkE$d?`-WlUS198{%8YJc!Z;vaFZ=4qIm2?n_yu4j8YIn<>3fY`G zeM2~KQu4gg7Z~4j&9o2p1%+#JNAVf?QlE^pD0ZC#RNeW_Ej#7wf^Wd1eQT%HKRsOA zHD3e!X}QC2-5q%xtVIr1mmtQZ|G@c+j4rBcv)zEYGZ=g)a}8(}EY+c=wdj3P$-m%x zZKb8}wMXAcW}e2#y+S(;Qo{?d_@1O?U->9Y5pfpqjvRPnqjuDhe+VcJe+AL7%o{As zHMbkvs42|AM<A_FK&s_01583Fu+{`q%9Zmm<ndn@C1yq9i~m&Hu1*n2?a)hnrD)Ak zvnHMD%+=%JEeRh`p(}UPZPleuuOb^1`!JY>yr1eNQGz26$)HO!asOf%5&F)oWOVcd z<J6uVM8ZngS%TMFmU-Es2}cz3H}K~2Hv{@!7jbDW-J|&k=HL6FV<xBW*RE>Z>{lB3 z-nsdIWTy7Me<?Ho8)M^&A|wqvTqnt7Pp)><IgDj1ZF~-X+;--+aMkn6G=aD;DyiOa z>rP+;zWKwCNE)|tZaw}@_-@-&Z;rtkAUfdiMo?|RDf~bb7wvfo>1tfpl4v<A6hs0T zuSwZH6Iand<%YI=zSh_2IYGVj4M8HEX)2@Z6i_T7Vde!Df1}wiT^#ugXxL>Ge5NI# zi#cq)?`S8aZ9Rc%sY$ycTlH}fl}I2sNbg9PPBg_%cufb>k~ik5*5b)_v~1zySH2!r z@eT^MS4NDRNK@ra1rcQ=^_6cpBRG%7rCL3$8V^33lZL>}_xEi7I!D>RRR!bLEVwOR zyWj2@OFJUU<t$akGC&V}Z-4Yy-hVG%Juc#EF#?~)TiMmEAzfXH-z?8YdQo{Cp74uZ zcRV#)NHZuPT-t3K;<#xhHA!FbT+w(XYrFbr^<Bt|zHo+<AB7!O8zb;pkVZwXl*j%| zcoEn{u(Yeb33!$QwcKj}m|Q4OI7EE0^-X`fohO#;kte;Jft!z)?+8<X(7r|?Yr+E; zJpxG#=XNvf!|=p^PiP}zN}@z1AV!b(;9f=aY>Wp9Io2BJdr}!g(hW*`CqpsrH*)c& zZ!6esF@uvEpT-izuBA~_h}3!*iVJ;hx;x~Um9@PMBv~@5mV8`oyXR}9Y2r)<(|WRA zVVTiY1}GZdbt$^mWk`OSNUvoxl@Z{gS~ibE=;G&cssoW<nV44RgobUHE`n@Mm3tJk zI7x~0QpNb!4wy=x0}Tz-Q3(C_I2#kl;c9*e93BE8pq$vjeS`s+rW}zp4^Ngj5p~sV zREq=0N8It^KFwo2nFIq<s>6Z${wgqPo$~6drQag~mlZw@h;Y~K>21qM?UR#@vE|se z{>GgV2TeRqr;XE9Bu3sx-#`d;mjl9!q=K-)XS|a^KQPD#TTX9M5#`u9>sNAS4>xdE zK`EjwEYk=gin=3>&fl`A=+tsi*U4M-4PHh8=%0NDSCB1<z6`D})aN1La^v$ys{LGr z-RKYQV>OYJH*k-n-qw|V{2b1Kq%<)bcnp0p(zRiP@}kxD+)50We<d8bdjXu_KUdH- zJm2%T(9rjGMfb?dpNcE!|CVEcF%~?=+GGgXBEh>_8%JyT?+3Couj7>#`*f&Z?9hV! z<X$O8JzCj&6JIKRPXfc#3U7zmu9mw~JNosT?ubk#PMuoV>8MJJ(hy5GFZSAT5iP>~ zQ_Jog#v68wGLgkY9iF?p`Lfm>i+hf+Z`dwqrz~I79QoEEm-oD`zdEVqu-sI1%5&$f z!%iu2#4qGG?lxKx?lA68AO!>pAp=QQewncQGjV0%gGM$aIg!T=ml|Fs7rM6JKWf;Q zeyNLluOV1K0LFJXYsg-6^ex{&M+T;x<6Y>G_u3=XR^g|~R!J;}?LMmt_!=)ny%G3T zM~^bDFj|rsRZ*)o;{&_R5t{uF2Jw-19r`v$&s94jsgt#pT?{^^q_l=1$YU$jXb(nm z@7u3~P8s`R$FZoVN-9O)AA17&?i*nAStN0xD%;~bv40-iSK5&B<grWmYj&${^dZGv z_tI@Wg&#&g+10^H+};8iX{lN)eB0%j(w&>LUb(hV^8IQ#65^}FC!LZ{?o9VS?%qHZ zGKF2^NgGrEM!j1isnfZ*KZIubnPrJ2V)vw;ZyEaBp2e*CwBL#NG(b18PQ5+Q1j2;w z)M<#kAZxc3b?Q7tH+-_(8o-6nF5En2$l@&O$0-fUri@vsm6Bvd0=|??W1uaGy19#_ zgpGbxHR<_t8CC+3`nB@MJqk|Dine)kKLnJ4CH_S7=R_z_%a`>4tIvT8(m5V12RUQu zC5`-RR1EwF>wSk@gaO+lX6XPc)&rTge|(oa8t;QcZ{9rawIfkX<jS`FY3F-3U9n@= zuqCJiDTp{xq;3}0d+=*MuvvG?L;;Lp(UijOQlH~tkiR5&!%PQa+5FM6(tG9Fqtx$e z`NoJba-L57RVXXeJl$nNRy%&b&!i{!+f<(dI7t!|8UHIZ!>hg}>(yrYPL&vnX!i%? z(6O6$#4a+fAolzOBpz2J_m}8w(4P}N;gJo%l-#D)`a1m|026+YQv5|YQY?~otdL@2 zxDCRTLpP@jK6YGAu_Y|DC%$jqRPcjYRU7&)sr6^mVP11;MD3;Gck1;D4WBrnlwKlW zy&ZsFHIG!td`fQPFSi|(2CN1)^MD^I*wM!jZ_Ic(NI@Gre+{}+hI>f6l_Aj8k`;>9 z7$c1uVq6^;zh5-BHLGW!*N`et882pZa-NbhF}Bfm<MY*SaM5)a^@{)wJrTuFXaSu( zk+yzFB#147W{;%v2`G@pp%a~TKW{whRfELnhBo+_E_hS*MD8%ncqUcpjn70di6IyF z8%dCe`xPNhcmrN^L}~4cVcg0Q#^}w_E|#+43EN3lrSo`RSM=N%`r(+udl^?w=+wI^ zVcr8^G&M0eRtUp4dRN{>7O9vyV&J{TTSX$ylfz{Z2Mq2NfE{-|Z%s}vB6%z`^vcQg zQ(R*D0LngXKvmg{4CLeZh`I~vYpINyZf6{O|4J2*(!nZjsBx0Vgx_5+e(GK*e3w&3 z6nEdU@|9hS=(E8T!?YEV$k+A~)L+7L8~qYh*`R}sM>B~2l5_Ug99(zJH|}zIwfFA$ zdR6MhuKr&x#jdul{qSIvECNK5TZDcYZ<B&j_-R*ueKqp&;MEB9BNcrU2z~#<2DW%Y z6}=_y(RPoHxiaT8*n}=io)|#=0+^wJ)f9bmc)VG@h8y<fY7D)M{V<9y@f*i-<Bdb# zk1~K&9w&-xAUV)pyI%<LRs5ugg~#_i98hHLHyDJRWeYSP+PM3A?HSIDpA8-Kg-{%# zR2JfTDKF<M*@OlO9!$9PlZGTpP}95#d&~!E3ol`X;)q?3m0plNGRoeJja<2`b41xn z6u$v;hB0Vp4#Hz%tB}DI9R`d;Q5^9bB;QURx2+2XB0>|9%!_67jIHM{t8t&%5$TW2 zzak=GcvLhYfU{3aO!_k&N9>}!8T}iBF_05O4%XXDV&!KKl)#Nc*69(1)&;|T;^PLg z`rslOwFj&}zMcL3yB61T?T=%;^>oFLt;gbP;nNepK89i6=wa&5pYI&0S%w<652%w& zFoYE3%wei0Wgt)lsK>p7r;^|cr8^EhV)o8L(%wsm>`l}F%5D9CGf`L#4C2@8JFDgG zJRHf4WIxbZHNXxcu3B<rQR8qTYgu;LcP$XME&@AGeN`60LzVq_lOnL~n`VXvu(MO| zB61M<<|_5VmtE|WkO&4QC0FzHIi}~`XD$(8(xR@5%AfOPUW!uvrRaIvw&lM1!_E5! z@gx^nimzX@d09Ahkm5i~Xe6eq;agyY<ZATw_y_#Gd<|Ao+O!5rU~vA)av%Kz!kRqS zb4_NO;1^7m5tmMzY0F~h+$%x#suf5{9hHdewQkcH1>l#=ToDcU%p!G~l_GJK!Dpbz zsk`k-_=)-NK!V<D9tQWm*2zoE#}d-qK_^|;VtvN{#1C+O%hZEGhT?2>bGh!qPc`%G zo<R{z!<6B(g4Ci++CWxHpl#Z;KarY2LW;Ow%77*p(wC+gT~YkNa8W1}i5S&loRUj^ z1;7&~b%dp&cRdm9Na-5OT*&86KS7aL4HoxY!*(OJbV8ZhC<A8`iJ6@72kjozo>$$O z59{IBP2sRUX;=XfZdi&!!SM`WKBpWjizWYO`B!s?s=6yN<N|+-3%8_xQ>wk?yirVy z!*`dp8DM9XcgO}>=K!|;QVTz>Y?6)-)Yjoywq>d7GWk+0^F=wCnW}z_K3RR|qNN}| z)#*jW&0trz<WG(f9MIF=P_rh$DlGVH8;2xdeS%nI<i&g{<;JzZV_C=p83VT$u_?jp zoXS$sgOv!oC&Hy#9br?d+bdR_Eh^w7+GqtKlCBKDtxNvl3d>Id=y?KiYvhS`M*beg zM7rQpV(SE#lXSOchdqv(Mv2~r)yN>kT2{h@nQf|0A-E$QK+M<%T44I~-9!N}l-4G0 zM3zfE>#RNEUwokJwQ-&M<iWfDCQKv^X)1OHOUrJ2)p3NjpLLT_Kii&&|G>?X%?i~^ z17Ygh`k<pGQayWowe_)_FwtzkllrtOn~UHCdYM*X{x;IoDEb#k7>uJd?fu2U7wkcy zVq1$31BeMuMKf_^*BMoM5Q^IAL=wH?2-Yk?#1vFX=mAow=mN}vIUMjC+q8oy5Y~Ud zN%IiJ%uL_gaR+UKjEXn%!uwjpq$mg|5$>2A0PR(vwk~SfJ2oi0nC5#y3wTgEVtnRF zQX78Uy5-th|I)V1T-ZXMw;gWIea4mW94XMOUUCD2pw{SudUqBWL}*OfwM+{DV9@B( z0C9oPa8x8~e?Sl-?&H*SEP%lEw{*cO-I~NXh1WrkgK9xV6etul0L#>XQ6Mp_-;-Jd z5JJ)!b3e(f`{vspO5g$f3+^p?&7bJ$Y27Ku3#ShR%MH`fKG08ann5Y+&*laA*9jVk z$zN{Zfp?<+`~86t_)S**CMEFxQV|k>uK!{Wp8x&+K&<>>E$lIA{*?d$ME_+fOyCS! z^zZE$4|Eb9^vS={{*eIRzY_GP;}1JD`a0_>;d^VYdNXI|e-x@1HZ`^5)SP24Hpo)J z#7fp9N}u<pYh9xRvYvJ4E04B5_Hm22>G8a&EgrF}v4}F&$=lffFlZm^s`8s`GFy$) z5OP<K;d~apv^0i8l+<sw(ZhQCjxZM#GH$W)7`}U5>HR;P)dNdZY@-@Ojm7jCB`Sbo z1|N#K?NC!ZvLh#{%z+6$4;{bI{Y(>aj{qm95V`T-clfWD15m+l{<3>X5(uEA-;BzG zVk7_r|BFV$gUZ0Q_CL1fhv7m05>i;GV7iA3e@_Nb>3_XcAO|4$Ki>*?Q1%0N2QU84 z!Ef#Vp2h#kqmctC{QvVtz{6e?kN})V`uj!#eA@o(oPp0i?!#35PX^E8x4{27Xug4{ zuWm71;th2^4xUwh6P|YagI{~O4yb$$qv|6x#Q8Uy1U$XG?p8<1d{1z$U2JgCND;x# zJ9Tol!nN3(pF!&S>T~n+^9-#9(l0C_lB`f2kJi-P$z4Uu4-_#0_f1|gcXY?JZo*#@ zqdE84uD!m5r|g^<0kF<~^q;x4c*k_uxl?Y1il=v9ylk&=Qmc4$<i=hF1k8!Z@J3?F zIXL-j1MpjxU2>`6#xL;>1<tMEK_A{4c_1hOkTIO!G$-&k>GuCi1DqtYd<nPY|8)ht zp+Mz-H!R^?*AS{XQ9SX+8+Iceb|zJ8Ci=(&%kX)4eZ^+DuJ)>9!9#-I<t^4l9!#03 z3AO<Lk0h`K0?z}=kxj&4+@9qN#M}FxhI6!;adkc+Hs?9$8=LS+Hf{Pt@<-pw%d9an zT=oZ$qMT1oI|sv|QC@?W(VvgtFW$=EI-2i8w{u)Rtm<LxKNDO!E)L4;eQLb!pB4&t zLE4ZF>p*wwnW4yoV#LD<iBH*+z?*yQ7lOX72bt|PDBM}q@9sBlLbOqiDz#n>CSYWB z)eFt#*g2eRyoG}$(l2{xhXIX%$8?~g$}t};q-_Z~X^-fNOeZJQw}=yO`AznP?7KGl z5&e9M1<4UZR~kwr40Z*NO){-$tKKiA9h0$NlT8*ne(Jqxq7cO8YyO1S@ThRL-7b{D z%x6R!gC0ARx=qc3E=P5xzoVJu8%jH9?#-O@peS`z2G8g1gzNoF?W`&WnKbvUGc9qK z%c@DS(E{_Y5lFg)&b+|$=d^e(fKuLJSRe?#v$Hv{0azU>+n`MT8PIZr4Rq~z`&}E| zo?B-`>sMi>okKjYJ*2hw_p(R&<rd@6HA~H)UVV5HDPHaUb7|S;oJ@iqd2!T4s8Vko ze7BF34&qzpJX;M9N)K$-jS0#14)Yh15X(iO<37aaV!Wh_-O!O7nxU!9@<-RXmBfg` zgqpGtITIg_T}(~sd@)c|Zqr=i%SHHRAEc=i67m11yRUGIs_WjK8Bzy>?iT5gZcw_V zJCtsa?h%lX5+#(D?k;JO5~RD4?(Y1ZL7(UGd9U~V{($egI9z9D_TFdjy>_g1pL?zC zY71`Iyg)d=)=W_>tlqB4+H=`CJl|J<FzV`E9HyZW?Yz!P!ei<i_<43R6USxz)AK6- zptn&fCF2_<Ge4JoXX;tlsnvUh05lz{^ivJSH>;A6%h$nVCLUN<x}c{6MdF@#R+Wr3 zSO&_`c!cfxpXRV}n^rM`0tZ732LyxdJ(0oQEn)L=WzEY`Vunf$a-N*1c9ky#Sxxy~ z14<I04v=HOkRD%I&454}&|*efzig2nR!i`;95OdV`l*VHKJpmRF*n=RGj=cRJyROH z;3u2T1Jsmj_^%{M2NdenUI_hQN1tQyqE=OlZJEifX!ABNeDkAa6oP&HOrdhEay51T zF3st1(u6w;29Ckv#H5Y4Zi-Z4!%~cT$<;S<KefB%j$gmrj{;=((*vrg)my(irHwSP zv-IPjrxrii{IYJxMQH!BY+-M_?V7~{w{rSyRpbgui*4;Wr0ylxBe7zg64jc7j-BwK zmG{qbd+KtL@azN0NtC;dyosY-hds9lfB_AtJOMOVg_1D|z9}<k0FS*{SCK_L`^SeE zkVrX3jFxor(P_?!;vtoy-lD7=fFS#evxqZRZ?-i6t(it3XKk3D9?*CY&;-2c+|IvA z0<eHADEp!?boXGVjwkl6o%Y;#)$Aon^4gxd-nn=Rx%#x{H<__x`B}YjNWmvZJaDGw zaA^TVpv23qRLZCE{@%w03pem~1$bUjC*d-2Gp>bm`+@ATgChuzeZethm|c@0|L9v* zW5y;;%g;}fA{iNdr3J{X!=sSKPGxyebYbdQG)+oO>O67GP1|qBy4Iqf7xSR9(v2!d z%KI?JV5$0s_L)?DA6qL#5itOZ&umT7%cPK-Kp5sxvBtkceWpShFD&*H`V|5nTwSbX zC3|NIe+c4U?w(2JS*-SJOx!QJ{?KmAa(B1ETi^2>W!!dXb1m8xM?HlD>F!2{<{(`U z|G|$uB!X8<N25Yqo^39ZOBxH_AC(8UHf_{V*|8%UFXu<cPOe^GT~qYELrL;-$Eut@ zSzP#rsO7Lm1L2QO$h)%tlyZ0eC%szNt8{`%Ej<|eSp>fT+V0zz9?qIMF9m0|r)++W zQo;>-@`nR*WuY=5bcSBO&oxO^-<pmrKc`5e6|D9D_<eW9IFq5tdsZtulz?pz<q5*3 zStd~c!W@%ahvh<H7|Wm*Olpsw2$I2$LV%^+JE#N2vJPQfH7^9#o>1*zYUYnsw}h+B z0Lx_TM*yCd)<DF@`e5?$)uG6@`1;1vh2phY<VBo$WdJrM`YI?DbLH<JAc!|~Q-rzP zUC`RA0$Xzx$@0Fk<#!4334O)bs`kbndI(@iLwAzF$u}YW-yDPppA4~?f2|9;tbfbq zeprn)i?p)E<)+h5$t);zr=3{vs@8hKJS&l+FHS}R-9Yn_P6^ZU;4vM|M(qcBq0zpr z-hxL>LMYvhLe*IFC9WA~o;6Hulayb3OKsx=;oZcIpwoz?({T5lB8HHqMc{jP%`<LN z>E^d+EVSMgT-7!{@s^bA7*evTu&z4ik5XlYylS$7l915eY>5<d3<=Nsk(*3wc_>Yf zN8Xs2A~aahgCA>Z65oBPq*Y9BK~b?*^u`JyJ8ef;(m~)MfWL=GIc<z=?JES_JIB^1 zV$0LO#;<}XgJYiYJ8y5UW6E=XjyFi&^yW9}n=K{|(YeE(pU!ZR=sF*qh;(6eGWf!8 zS_QV`THhA_1J?{SsW!tfr)ecqteC0paKK~FL!{xtqD)xk4S*n-5P7TnLZ%L;9Ez~b za{AB_KPJT<;XIx=AjI;OMy#%`K0-W=)(L74F9>$FO~i6p@_gi~?O5w~JMY6$bINMT zjTnBETM=)Dg{VA^68(WRwmkjpE{E}Rx5pT9aUhftqqawiS(9!L0zmW>(p6wg@XUSa z`<{b<CS!Ftw@HgXB%d&6KjB)-AfC4@H2n(+2GIUD3Rb#;mh+z4#0{4Rq;+gJ1D1uZ z{&$P>=Pz3}m=!S1-sjoY?TJ~nGxj`ljEEXvG@Wrb3>W@juw+8l^s4SBTUJcSY_I$A z)~M+T0hc>tqVgL>STFZNXcFs(NuL4#`S|UcE8W*7t!}uwj$9@Q_5dNroAhgF#mkHG z_u*ts@=BK$x%okxkdI~2cQYvvbcWp_vPF`<0wsK}1yV^P9fm!(oj_?0;K!JPP2OnV zSkS(eyMe`X%KAeesfgg%SjI&Aix4W#H`&rP9eO<Ncx52AEK5FwKgV#dpFTzjPJhZk zN_6Z%_ey+?z}Uo#<)&Ng_y$U3pHThS0*q7LX>o5jL0}moTl$latHA%0Gao~f#qj+v zj9P^}#|l1-lE@k*(LCKp1{$!iTQ1idIG1a$u2|E_h_**V6k2sJ?;Jl*xU1L1fKw|a zheeRf_XMr0?7LFFeMp%wn@G!(>LUWShL2%5X0F$GvtlM6l&kONTmiUsuO+r?Y~eWm zT-*ru+;{Dc#3nshzjoO0=QA`Gcsm_M;qCmna{5Kr<yn*G_@bVcpR39DT3g0vMKG#H z5m+RZkq4)LrLcTTWpocn87!Xgun!Yo$wv`gWsoQ5omN0y1lLtXiYW}L!)S*Lyo$(N zaX~LbW3j=<F?-)tSiin^)qHw{gC&loT_#&na<`mlCyZI}N@%bC8xl1oP5=DLoj6{A z3WaVz@24Qdqh#VIM95=RA<VWARjAwB?oDYbfAIiY_eVe)R>YOJ$;0HO=R64fPW0@2 z`%rUiGrFPz>L!)8Cxp5>S=(KsWKRI;$x2`tSZUwk`-(?yHxc{}--sSsRyXpr7YEn| zB$2V+qzb216h2Lbg#Ng!K$QF#Dp6L4gMMrn!?9KI?oHR~$hx2VJq%#AOTp`8puwJ- zB=t_=@@{KZSHaW2*<8pd_dWbj)X0e-bdt!uO<GMwaN)Q;b(Z>Bxsf&v;yDNy{DH|5 z-Ej?mdX1t_pR`>B?|80$7A)<+NyRXba(JY6mxZF2ozj&=OAqQqb7%LlfW6)^cG<yK zBv6f1W$X+>exO*R8is+97~cD4-6nu)4m62aA7+01&Sp#XjvXhW;|Gfl#Q29T;wea_ zO1K7}%<oq{0jrt1+VjVisAAVV+oUN^w{V!Sd{K?UeV0(+*pIRa4O(2HRXTN74hb&< zw+h>Ea;}K_=HTZ_GI0oY(o&2$ZJKV4;}>BQgAyS%0QBO>gG{?Lk2#G6G+zx_7Rk2L z{m^K|FM5u#x#8Dr{ezzn2@h)flW6B~<0|Cz$}Hi7o~;pbIAibCyhEzd?9uMGD?7m@ zm*H|iJxT%io}-#~XbN%}iU=tB$-GxMP)(U&wReTv55Azt!R(2KovodOsFTi|LO2mf ztBaZ8!;)o73})(nDGZ=qR85?{IPVnaRi$veBWB{`Yd|tY8-6HKFee&~$UBw!vKj_W zCRG>)En<bVsSXn_3<X-~ttT0hRcF2d%Mf>$#cOdl^B&t37bD+6b;z(gR=a||03zBf zg6xti#e7h&#QmfBXLW;B>XpJG;X96=Co>D;MW3N>G)H6#8|D>XKmN*Aq2vpML6D`5 zE|u*?4&g@5hz`figItvvB&Xj`V6~^LoW2-Z5J4JqKJ~b|;LZUVer0mM#$9835vnkw zkPn$fxxin>-JhIwqS5tR%vXd`8kdsJmv}+3R~HYy(bRI><9-yJ{pOvPiUCvQLj(U2 z5SmRHhOv|ABGIq4$Q-QqtcZO8bHzEf)A<8i6VlV^Lr+`f(n^O9^it2&P5XIN25>Pu z?bac66H2h*65N&Nh0*?(y&zs{oJLlG*-3w43BNgRGRqf%&AF0FR4aB~#O$kz3*!qa zqkcT>NZek$N1KlJqinr(xj7f^Vnja6ZY$HC%VH}tz!v*VCwd6!;^mU@7wei}Zb-)1 zBZsibxZZCo%?#zjmP{H98=V_PKKI$aYba`^WJuQH%$1tST2yHrI)OLM=H(4+@6jN< z8C$8s7|7h2JL1q#PtdDFn2+32)IUkT?_TueR^HZ%FzXp%20rsTCTawe2_&gz>@Z_m zhuu0moeAg8yS;RqB-xx(cdWXgkLa*5!7+eUvSb_=QDMa>xdV+|VJB|_$2qArHu84V z=8nECtw{}Uz~ts^o#EBGr-}1PSzR;8CR)(I^5^auIgzTqHP&6^>-HIerioXGc0@Df zB~A-NHhvS8*0uK5lg_p6xxoMDZB8mKyji`>?n#N8E+2L%ss&G}ZoUUdY$tEcN(dsd zOl~%8h%KxgnDA}cjog^JbZL8&CNG4&rOP$~Q5Tz{jcpkA-A~;xG^<QyODsbInef3r z<MINwTawRC_wK1oZ=mUnEA7-ysW_yXDN{$^_3fV9&+KeeFu(0D%e*D_4UX=s?@n#X zOTodx8L6qy0OS46E!hQvI=2Wno#ChxJPZV!Dg=TPVgM=;hzv$f`TGV8=OTgNoELa_ z091pHzi!|#)St#X>%RbjKT5vEIpFmHfSToZ+c~q=++!zEOM%+kjVZ)?muoA>ji-w> zY_n+X)@PDqq)L37+Yu-d(?>ID9|Vyr-A{KABJk^XBWA_MNSQpjboTl-Y`yFk1k&25 z5+_e0V9svhhpO{CX_7B4-x5`HMKEnlH7KdP8);2!bBnFC5fY%2TzD_<Hbqsizn@K( z=&C)o|K9n`6-bfjGV{gG^TI{t`JD&46E;@3*y*o4PUf8r8?(ti-4)PtP~50gU9eu* z%Fd3LZM6RrXS$69fz$Myo(+YC#SnzRhJ1^M{Nug!o#r>?i{O?(cN<9JPrer%It0rS z!%@Urx2xN3hLeZjh!t2?{4XLKs=;3|FyNkQ|Ave#{)D>zLb{%Upa!gWe*;ecFSeR; z$R80flmq_(?{Xym@t*n>%mR)#E@A;V&!4n2c-6tb5HH4C|FGXUn=|JQ>FEaDH{xVH z`|9EP^a?$no!(Kx%`>UEqTc%vBzs>Gk_E25=_&|aPq%LE>kU+=J4`bD6E!0d1uW~V zhG&BflOj1?U)$Z4VfL4qpbFNRqE#pq16uc64)Ada^hcU6-NRpqAJDyiw~!osux8@? zHx}UsMPShW6-A^N$Pedw-HHJ4c>{n#poO=H-4F#p@A}(?>@N>8pj-bL12_N`49@<# z#S4FN{eap4q%g=wEx0WHLHvGs%fUtZ4`UE6XLzx<aX@bK!Rz&lD#+!%m~VGf>k`N( z<jry@NE8r1)4-T;F{SyU5#<;|<Ikce0AD@z@%5V$m&eal^-gBIcRX!hiU-P;e_C1P zI4EZAZ)qXNG+_<k^m}BH@6Wx!(eo_GDHB8F(Ucy2!BQ=b!;{Ru4#1+Kefc`*(NGSe zV$O4ETxx-($=Pc^Z6I8y0EvI=Q_o|q-c-}Ftie!)W80mpJ`r141wGHj?T)~iA#UB^ zq*y)oZ;VybI8M5=4Sq!JXA)Uk84HNqmY+NM)Y5#heWp3Fr^f`<w)Q!ORb#VIh?w0a zA}tsid>6dp&aI112<pVKV~w-3)fTW^ot_U@P|;Z%hMHUUqL&Y;8I{{i7VEdl=z?%! zM>Vb%9ilC?bCk`;J7^)HpyWt0K+u%87wWD9rJgqJP3qzKDWJ%<FE4A`dP#eqbdHf0 z4s&lUWhmO_zuzNqd)1*5Hb@fCaD0UwY@TzyqvJH3NU);Pzm%*O7NSeN!TRHz?91}{ zMp48NxAkYrbaD&j@LW~ry&THnrF8@A=-i`=_&h@CAxX;ch6PqPZpv!VMM&Ja#ypWq zX+(i~<hH%<$@6hSV;9~-9#50*%mVFD-E@_q^3y`vB@SzxIe=INkwrZJ5rE1LLN^0Z z^r05_-OSVmSQ3de*6xrzK6>(jdf6i3n8LvcfN35cXlc#2=lIml$I);1b7yt#_S>3t z#APx_PPmNvJqUO8YUWGsTydjUKkcbqP0eGM4=UG(u_+Iu59{PUC{m|HXiW_{P_=J$ z$9B34v2uoOc{ikO5QuR}M<kZk3ZHFG59A9&HkB=3Rjit{Wmn6sS$Gtzy%?F}XlKEW z#vb(TkX6^tTeJ@6`2?~Is32f2EM9Ek9bIng;4R>6X-79e#Cr(PECIr!IE;fWhWTpY z)=#YsomUGM*nm+#g)?V2m?jY+=%B28o$BIwW7JT^<RfIU9yQy+n|yuU^__rPbb_%- z3guDH2D<5S`W0kzo2#^1_EV{)M7}_{M5t>3-4Wpm1FHFbLT0eqJ!3kiYS1L2eirzl z0Y#rMB0-Qa=4)h%KG76(gKv5EhCVs={=$&_E}@`~$LU_D>Sxm)Yor`OEPAd#-=Gt; zr*t)nwukqyFUZFwpB`2FkL%YURhLYERBU9~n$fLX-Mv?J<e{{HXt*2F+bCqc)+~aK zj()`+PG;(w#dNLsh1j^^v=(<Z-yZUUV#d%^ezwpaZP}xpInL*KQIW(-0=V*#l4@@H zkJm3S=dufss42R6;sf50#XO;I+aF!d=?F(RI3R^Qgm>FqI2eqKh<AI5!>FVaieI%> z?GK`Eg;kySh!0A`oX)aHdp=gGt}lBXKJ{|k{CI;S71dj&ep!8d380obgEZeW6E_RP zKXPxE@zBTIXbMh3tlHSn7b8DVUus=fbyT2hGf$zf0<)*!-s>LMG=!jA=K9osWZ` zpoB=q@2ud=brn{pHiiluw9DisK$*A|7W{=T5V`q8hUqYId!lN3Fz4RJlq_BH8qRaj zQFVzhlv%x)F}Y)DF;}6Q9(XBGiEENue{b8Nl^8w|Zv_DoO#uf9Q#QT&G}H=EzXm%_ zg9(@P<BUvIodqvuoGuP3L4+?7zIcw8l=TW;yp&7ZY~XR5Ur}O?)iF<qKR@xAC?9;X zFcT*}PK+%?+lyf!Bb;SD$lZK}fD&5PzTccbspIR^eUFQu;p*|tYW=Kb!ozoo>pMXm zUEGy4LT3XZAw~@7bMlkmp3djP$AzZUcZ(Z&6<Vz&RcKq?)(zf;WN)%H@o1Z7S9h<` zWu@wH#1f#(N9gJ{<{k}mES%)MMOXt*Zch-TQFQAp?=t}c3JAwA5QYKc4H)O(7+nSQ zXFQnnH}mX{E%Z5Dmlxd;K)2i2ldxXCc|*|Nw-e5n^uaxty9@Ift4Ru5`74Jq#wL@x z92p$XG@r)9Po!x2oX#VM%$q#*c2K+CBmrj3Pu4o^bv$A&f_Afc1S>`#Ws1{xpid|V zW|IUQvOGC&$jOKx3@bK#QZNA-F}F+rVG1`j&sMSgA#WYza2jEPY^7aSwsuieV6*LM zq|XX0j3R`ZpN@Rg7Olqle`ak6jUNY!1d{mfDtWIyUu@qP;dBf;YElroO72d!zTS%3 zEda9$c3nqbue40<79xyzCzW~1^_U7lZ?wpELac2s)sLw&Ug!m4-sg2<t&;4#pC3#f z(lo(p(F2ts3^QbzXNWbEG8)TEyudL#;CWa|SYTggSET*UC7^rUh;n4Vp{Q-|S!^Tj z9_Q8K)b6_%%s*m#6A4~dy1?iM_%vZxohxN>6*{dR;f6J*QAJ-dmIp+8D?aHipWb6r zxom5}Y%y+kMcrM@tYNrNvr5)VGv>@80@fRH74Ne~!jo+tyA-=o^$edWpVj9i{;^)z z*f+IaC$Tq0miZ{&C#vSr*Bfaxo|drYqQ*jo@v5RnbsI3|lP!9BIw11?PkpGT*X|rH zQig}cx4Qe(M2_o5Hj(AMI|NgFO$ez;Ng4KNT*o_n)wJFT<?1Il>Xen+i7!tW`%LO$ z+e6R41Z6MlJWW@=;n!Z!oZ8@A9a!kkO8RKx>?ffRa#PTD2Z?RPD?$Ln<8GC{%M|{c z;Rde?EG_imxv#!&w2E3z)CmD30W7bE5?z`^w67OGTHEjyQ3Fp?<E3$FRSw4ze78Uo zO$io8c=#Hb3^FYkBs@t$yE7X{Q%>b8j@G@^absaL)DqNvZ$JUf$GpTdJf3gE1tWNb zyWZoZ!MW4-<YW@!xpH;V_&9l1w<ddlUu03dMPr7#!KVpU)lH@C8wetlKcb-jBAd5z zxY#OTq{};TmEU$JI=mK1tEB+g#l26whczy#ER6cROXwQ)5@}lBd=O}TrCJ%e0U4YM z-T6{k2`y%kT^c%%*1cWWfW-|2Miz!mB0)AA7{^6FTZ3`dqBTl}<fNr(ysTE)*p>oJ zF+Xv#PGl)0=XKxDFZZE-q4v4MEJZtI0dPB`a-x`ebvCrndoPi?3YbUIac!IwQ`?EA zRiLg`ZPs@Bofhv@A0gf4D8V8H*A?Zkh1L|@BoBr2sT0XX?Gw)(kF+KH$7|GFN|p(g zeUUq$E{A7|<ac+O8c%A!G*4LE?BVU7f9P5ZaOzyK&xwxJDCE`3lFcdXSbYxWtX&v} zcRBGM8piJJUoRQBmkju{1Df2oct>-nJ(#%&Y$Ej-T%0lssHR7}8}G+72VErVpE_$6 z?YJBWhZ(*jObSDUV$LdDc6O9{acac+po2NK(0EDewFYULFfmrPV`>7EiTK3^tLZN% zs;kPZ!7<R<A3S>BCLK($KAr^Ev*0?9cZ65AnbU8@1jugu$csA1h<;BvsI<-bI4|L? z^itLQj}S)tLczM3AubGkjr34bQU+bT_X#~rj8!AWa$?CU47gf~W*L>XVb&ahJ7ezH z(fDbpWrn&fh}Z^}xP-v;0snEK&+YbYl<JM@VxjkQjd|49Bw*VwMZ1XUc(hIvP~)BF zqzeul&+q7YmIce9(B6<K5gDv#%}=U#))?VxEhL~tn!7>PYZ|;zre953D?T>yqI2|T z7q#wDtk|A>@5PZ@(;$Dg)rm}Rldyzgx}=N^s8T__+lo2wS#|l^Ng$iy&(t?%jzWcN zXCa&pj6J0*yL948a@x#boR=zkx|2v_`GCLH?RK9+FOdQUfdkagysyVa$4k5pKV_M8 zZ12}a(|f+s(_C;w;*}*S#mTKRRPD?=^-{IC*fvs^<yPIwJwUS2S5L*U#aku+LQ*Af z+o3Y7hQ&)I^Qel<fPLcKV+AZtTl{z)-&i{Q$?|*WXi=IUG|Q?$xYca|g$%bUCJ2=U zMAq~W<f5b51GP*jd?o=EH5xIBE~ga9*pgJ0(jHXp9C@?6My8PJfSVhYh;OmCtP-vE z@$>svVX_diCef7FsO%44KZe}X<$&BnWhs9)-x;g#b>xMiI#MOApJrc!A^89VEZ+!! zT*-G_fycrZ0YF_KgWLmD9=PBh0$URLt>y*413q%I!IdE30qABxDpVFSz~=?{_s<1E z`&|yOm^j7)+9!O=M);*b!&`RyOu!8W0o@GV({ZTm@Kk>!`dicfRrYN|`s673KtLV{ zJR`h>+sFR-sJ~15{UvJg@037lxaJPzxUKeYW%yUwztjGD;$JD?4U>Z_e3VTr*VIzR zBI@-=^Njd@JE+XNBR<{dW`_zUnf|8UcqfzoS=R>#6+*h#A;|^(HwN{T{7o06KAwAP z<bQVv4D@X+;PP9!*|maTjo1PxVQu$;3WyL94|c1V!xgi?HhmDhi+>LFm-O=NWcjem zE%+m>(m~L4so?$mN3H(p>tFqT+b?z|w+az_{RZ@h-^%i@qTwHZH|e(y`?>a3%<v!n zeZjTFUloIGWBh+wQaLWyl~rF#JS)lUy*|~|n*-{unU0Hynu5UVT#_5o3PRA(c9u|1 zp4-dBo%qaN5X<R@#;q_db#2mRC+?q3*PyHix}v~Tm?LCEu6I>#6GrNb4mv+%Jh~8~ z1*QrJR(KaauF%cQ_)zWe0Aav`CH>aGfg2DAkoWBr1LOw!Yj%LLBL4dHOT7hV3V>t* z<@_F_@UWS{@CT-4$_DhW-+%;v7xG`SH30!&fKqNJDIjoQP=Njz8^0<7tP<0}0Q<X` z-*e@kY=Jq|ayb^Nd%P8yEXo;Mvg#pR%qsSTFI5-KX<ouW3bTbO%j(j`TZ$G(vC>}E z%A?jw>#ZM7kl>F3HynHpocWkkciJ%>`Jg_>zJ{RY@+u=%-#hR6EFxTDZMycPqH4-n zd+6xOhQw^5q5_!L(+aQ!=z*$}-(96kIv-0b!^u@*vG$Ez6=}7Uy_dtz$rcQ?&g@6# z>*{kn&Q8|B(vx_D?g{QiOdPq@3?gDuwGS^oDrradTL^f_U}h9@Xs+dIN#!V-kIN-T zWLHK{e8Wez^B7A}$>7y%P_<A(^};CM9bwN-G1e}*#Gk6%U&+nfYscXjE$C6UXenIo zMH2fu8l#&>5VCWsfpkRu=^$vB6o`T~w<2CwsRaGx?&Ue<9%krpP*5dE)#zco`Ct?< ztM>=8xzxV9M)30(<+hnW5YfN5e%n&6a^q51vo0Uzkh{9C5FvQfQeMKAWgUOgk8%`D znswc6`Qt0I;7vpREQ^5K_x@X>sm&Y#)voHTFar82UbI(vVTSgIdX8Uv=WygX?^4ye z43xSSv0A>M69|Xd%13xHcI7MWeBAbev2A>bPb$K2!`P)p&dZY`y<kKc^R(8;I9uzY zmVn$wWRJXQ>*cw6uGsfk{5r3mCrjrCnmPLfjJ4-kv$@Rl%DLhd1*Z^HI}<$_sgqG; zO?{h#1S*fX^|uZ8jO9TfyVoG-)lR)-b=#A}+KcTMN~COVFALkunOW5(?(9OJ6lDbG z>)Cf>pO_^mXDB2Ks!u9yPz|35oUdw}T_rq-9i8Tzi+rNBtlqVP-xYhk2Pcd_U+_l- zR%;i^hjZy(s*I0VJPsCNC94T<F)EyuW$D54d{p4$9F8wqj%<d9V{inacZTsEclgd~ zjd*`pXVPaSXWZ;Ii?V?H*H6#Ulod6fFb4fNe7IlZiH$D|%hR3ZU>zh;XlO@M-8@N9 zUKW8(zV-+la`{nfy-%uD**%WWjg#minqzf!AjVio`6?bgl5sEI?Gc^zjot*x3^=A{ zSXE88u)W7o(;<Fw!4TVXLm*jz8U(6-3Y%sf{R!bej9y)00^jGWx%>t<uG_xM`5rue z)H6*i2^iU<aMO&knXz`BKqBZ9zo0}zFDyID)I8zgQ&=rj7?GE4`0arj{#U5D2hv#D zESl;%m$Pz8s_w$rODjB0E7|67O_Uu&)JjTSE&hdch!v`!X&?+_TjFe8u>UilNpX#C z31^Vg(0`~UQP&l^8!{Qc(RqTrT~#pCVY7Mw2EnLNi+3%i#`G<S$lrlNSl<2#T!hB) zE^*=NxxVmkd$PLE++UK$)?NK!nc7=`>BVuZ4cNwt%VdaIw$>$<k=OH^^;Oak_t$sa z`{fzX2V$b4hlA`%v&3-26o~nLQ-;5>HO}U;eoi89wv_z1j>}eo4BT)WLx|Ghx)-uc ziiOWfY_mRlW1f?InRepMe3SqdECV5q#dJ_!yw6~gg%CNU);Dr0hy{?vC~8CHTQVIu z?`^PvIalHU{SjJRpGSw2V7;}y&1^aC{2n{H@Z4|6sSpGeyIwBqG@QQL9}Zq@u1rMT zrG)@%rc4y~i>0@=OIhez<LJZX7zU9oztE1wI;&f(gZ4kMj_Ldd?{C;&&R6$_ew=_< zMQ|BE9ccJB)?xO=pi4B$xWNU(1Uo#QD=Yin%X0-izNY1yz)|YDgPgV}X8kukQ$taW zKQ8y)(~UnJ;U<THTt2|nGI>6oQ6i}smSP7a?yi_|>&~e4{h_9pn*FQ<iTb9pY2yCF zX$tOUvuTCG8PQwnnWuRUDvuyU-r&lf;Sm+i;VVryXeRN~o(U`xu%2DY7eU()`lPEc z3%YyKaxUHN#_HA(V86jxt33s1-~{+W_Gv*$oB5qR=CidnJ~KE5l)h}S%zVzr<EHxg z=26pJ)C!k6>r3zH!^ZKgtwsS14ZuXc62UPM90Rr_9pMan{|l7+c%~6cZ#1hSRUN*L zz%A=hZfmNKAR%_wxfWqXJ4&GC%+4_MIW{OFcSdU4`;HzggXGR}UXfO7d37G_rA{n| z!B;8vm&0y!HX^Cgv^~lwUfYC;2*;6nxg+YMp|eGF_tUHNA{vFoG;8~m-a@G<n_l1; zct~)0C?DMG%v`KSWSg!@;uGLPgD@-xr=#FZur^X1Y@f*{+cG*{blUQdz;~?TDHAJy zc_Z7^Aay0%)0248s@7h~Owllo@XxcvF8tI-81^w)uYcI=56=4VXfEI_E}Lk>x?Nv2 zsNHz4u?gWdSZ(I7>5n<M{{;G}r<9(dN^PTtk6k_+i1f*`FbM>^=&IBADa$K28hQQp zZKNqLDA{)Q{aM~k{7s(S4}l{tsL~{J)AE${3Tp8!bi#Qb${uc-L(?0TIKg?eN7{`> z)+8o3>th)1G*hm`*dq%2M%%Ppmwz7ORyE4cWrR2=0_)zk!$Z{QC}C37x2xN3O^m5t zsa=6OcYSFm0NMzy6dP!HCuU&1$F}k&BdqNS9(t5a`J=m=!#!Tm@-rgT@vsqYz3Nd$ zzW#ng@uHIUhv+!uwzi1C0Tg_!kgIs#M4zcLpPM*@=xEY}HIS#GQmLDaeg97Llaotp za~|RfgoK#k?~u(CT75sNvSs2Kvf3|#$<~!ibTbwk6_!MeF9P1qesuM%-ok1z;6 z&yd~Y=zK*7A-WG9dB0l46!kv-U3+I(N1U|roy_+8yX#ZCcXr2^hl7>&jg@sxqN@_( z&lb<p{pI2qyJfiy5kN3p)M791(YYD0^Q^n4;Z1{IJd>aF1ih(E*jSCr+vzId_&q%m zw)K@)!O;K+Vx;sJ2y$3+IIyu~RT{bxvuglI=*!u-&Z052B8My15FIdoyq25s=PJJZ z<VHxyzfZTMC-S^RmM*V6>6<35jyOHP(U3Ci%`$bE=+{czB6aLU#wOI_4lBtFD}_0> zrt!0%m<FGxE=vp795PO}`Vs)e&5RVa*lq?0z+{}-R|%Ru8KW$D?QeU!%Eh)xn4XMx zJ@E33h|6VUCzR!Qd-`I67CJL)3*AjTnZ1eg^mbWGm5!)#G-gzv5i)3+yanM{V`4$^ zWo^ij79NEk$RQ+Lrprv@XWMRT8C+&WeoQx<fEJ+mX(x`*##LhhwJ6MkPkR~fve`ij z0J8zjy*eHSYX79262_3^3o5!x^CsBB*3T<uq*i|@9Ac?nEgFVK5tGT(IOC-@TC1Rq zq!Ba~m8FyM0SOOWs6rmoNW;-ww{sCq9C5!0R8)y5Xj`PNZ38I%W+<q|U*yIO;H`{5 zvCFVgQhK&#D3bh%mWwIAqdc--(Cb`>u}U=lp#BwQSwi<cM`*cZ)=;qBEi6jnW3yWK zWH8Gnk~)gLhxlan0>PnjG{&(C^nmneS%Jz|;Bc7KlMMI8_pQMJg-6;8uH^HKifiig zZ6=?N>W{XEx{K;CFTTUy^JLf~I-tjpR4pg%2=K4J;d*&JIQ7bUkx%sDoXwrx`^EZ8 z*5P;LU@kE<%EuEs%LK2wHMNpEXSg@h`P%csM`)FE!-7ySyY6j7^&ZUUA47|S11Xz+ zqR&Zr)G^nvE)I`#38HwTaQm2^BA&Ji@8FKEo%gK(I=QVY%2<rLpXle=I8G}4M+%G2 z|Bb-(H0jOmEWajbC*$HLyo2+&A^9{q(wHwMzpF9GD$W_1I6|+$zHnpG<y}Wnz4&-R z^t8G*3<co8dSn*4^{kzt7y0Dd`}UWa_ICZSsrt&e9zd;6(vaSIa&4elp+k~sKLLVF z$$=0xB;T_YsnIgZs4F_h=W9f(e9WS|yk6#ZP^+QpQMK60)R4)=94@TE%;Fl}e3v>1 zEubk^nyhL|QeiNS)vA&hwN>s18x6Tw)xYfwRqP)xVS4F{T3jCz1`2!%i+4Fa>P06< zHIvKO$RW>*BDM>Q%$qd(T6h?L@P(MUDS%>hNsY?Gw|6D4-!i(a$IT|47;dg?rH>ld z7uM2Hq}mprxI6LC&v(-AysbWdTgxH;(8#nrqP!md>Vl}bRrSW8XJdkIl%g$G=hgSH zQYHslRSC+yRl<uC(pTM#Rs73()TXdt;bf_YuQ^+?t;!HAw~*CGM?1=%GA@n1C8XZ6 zr0r=qmv$<ykscSIJEjW6ORSuMaB{Jjas)3iDU`4)nz5<p=5TrOheT>>!z7R~zI2<& zeVv~n*#H6xd!0q|%x<(^2Q0fdVdkGF80M<x<cvPEL>ByhDrSu}C;Q;3+*qDg)Z)FF z10-hgQsATtuwXad<z-nghL`t$;5`ZAfURxE1p#xm;4bH_BQGglu6L9`q8Blm(g!G( z4$Sm*O#FvprhH)~#v*ape1%L3w&Y)ivDXSl>&cZ>>6hHQ#t!eO<vMCx3LMS!3K#I| z7`8oVK+v%*@|dIb1%<E^<mk?khXy=o+zXecHv3Xw{yZroR~(uXsDd*z$=CH7AHDg0 z@h0ae%?EMR>nY{kmoprIEs1!_{;iJL>fJ#z!HOdS7@5Tp7tD#KOvy!+SKf?P;p$K- zJsz2BVw>=SqW|^xP}Q=k%slpKPIHNX>reTqY)dXMP++puWJSt$e`%d^&LIWku(s?Y z-c4YqflOUR1|2M^>w6{Z$Y<C_H!R;&Sq75HirN#klbR7Zd$7m7v7{Ia5%=J-Mn0;v z!LwPhF{DB9CF_uVJo#{Q+@J{4s~BI6qt4?}=;yad%c8KIy)LCNL>86X_xHk}8zIEv zJBQVP6AZxn`2Efr2%!RJcNjo)p8#x;Uye$@zk^5G`FBbcQPA!282=+>3dL_80~rhq z=a2yOhd)!^=7yj70eI5@oDtyNI6NrqA1Nsx-F_3#+}+J5!uGnvb$6}5U}?|JqhvNY z?&k?&b61kBi>>KZE%gfD?qPSJ2Xkeu?VH(1>FUcAPRJNy+&-pRVa4S3b)7zGsi@{R zmZ^>vTA9%1cClH39~c?=&epR6Js3-;jU*AV@uM!dUM@eB*rNsi+W{s(s2(#2Uf~^s zYIp#eU*wN~hyNw$4m_aG-^Ygl3<kS@MeMna!1IfL@$A2Z`?)RfwjX|X2RU2-f5i&A zE$J6+1Qj0o=RX1siNFi|hqWLM3j8HV;Mf$vP3pF!UmjBA@H+lSyr28<0{=X<h3L;< zLH=a0oF_0JlcG{u(b40L-m^>h281n>BZlP0>zUWXCvLO#jZ?3?-9Pn`j+dvX_!jvd z#R0Q<ND>aI0E{EJ+Jpul(Z3F!`PbcTENftd0ZSX~f1OqHADRDWmbv8r`O_a2xCVVL W#?7vR{DdDk4U!U*7cG2d;QN1V>y_RB diff --git a/chapter-02/index.adoc b/chapter-02/index.adoc index c63d3900..7da2c8db 100644 --- a/chapter-02/index.adoc +++ b/chapter-02/index.adoc @@ -918,7 +918,7 @@ Les autres versions sont à voir comme des coups d'essai, dans l'anticipation d' vers une version suivante, maintenue à long terme. .Calendrier de publication des versions de Node -image::images/schedule.png[width="85%",link="https://github.com/nodejs/Release/blob/master/schedule.png"] +image::images/schedule.png[width="85%",link="https://github.com/nodejs/Release/blob/master/schedule.svg"] [NOTE] .[RemarquePreTitre]#Lien# Calendrier de sorties diff --git a/package.json b/package.json index e3a944ab..796f9240 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "test": "tape 'tests/*.js'", "test:docker": "docker run -ti --rm -v $(pwd):/tests -e CI=1 -e DEBUG=tape-spawn -w /tests node:${npm_package_engines_node}-slim npm cit", "posttest": "npm run lint", - "postinstall": "node bin/cli.js --help" + "postinstall": "node bin/cli.js --help", + "update:schedule": "curl -sSL https://github.com/nodejs/Release/raw/master/schedule.json > chapter-02/schedule.json && npx lts -d $PWD/chapter-02/schedule.json --start $(gdate -d '2 months ago' +'%Y-%m-%d') --end $(gdate -d '2 years' +'%Y-%m-%d') --png chapter-02/images/schedule.png" }, "engines": { "node": "10", From c4e12075b0895151cfa110e712907b0901ce262a Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sun, 5 May 2019 18:48:17 +0200 Subject: [PATCH 04/22] =?UTF-8?q?feat(npm):=20d=C3=A9ploie=20la=20v2=20en?= =?UTF-8?q?=20avant-premi=C3=A8re?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .travis.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.travis.yml b/.travis.yml index 92e7a87c..4ca79dc4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -83,9 +83,18 @@ deploy: - provider: npm tag: next skip-cleanup: true + tag: latest on: tags: true all-branches: true condition: $TRAVIS_BRANCH =~ ^v2. email: "hi@oncletom.io" api-key: "$NPM_TOKEN" + - provider: npm + skip-cleanup: true + tag: next + on: + tags: true + branch: v2 + email: "hi@oncletom.io" + api-key: "$NPM_TOKEN" From 17a001d0920d0d3755d49c49db4abb26f3d7b36d Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sun, 5 May 2019 18:51:41 +0200 Subject: [PATCH 05/22] 2.0.0-alpha.1 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index fb32ed89..3c90fc2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "nodebook", - "version": "1.0.10", + "version": "2.0.0-alpha.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 796f9240..5fae03cd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nodebook", - "version": "1.0.10", + "version": "2.0.0-alpha.1", "description": "Node.js • Apprendre par la pratique.\nFamiliarisez-vous avec JavaScript, Node.js et l'écosystème de modules npm.\nApprenez à concevoir et à déployer des *applications web* et des *outils en ligne de commande*.", "bin": { "nodebook": "./bin/cli.js" From 346b4261f222d47b4ec3eab871364e0ed3b981a4 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sun, 5 May 2019 19:02:26 +0200 Subject: [PATCH 06/22] =?UTF-8?q?feat(chapter-02):=20nouvelle=20URL=20pour?= =?UTF-8?q?=20nvm=20et=20http->https=20l=C3=A0=20o=C3=B9=20il=20faut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chapter-02/index.adoc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/chapter-02/index.adoc b/chapter-02/index.adoc index 7da2c8db..6dbcba08 100644 --- a/chapter-02/index.adoc +++ b/chapter-02/index.adoc @@ -163,7 +163,7 @@ Si vous venez d'un autre univers de programmation, `nvm` est l'équivalent de `rvm` ou `rbenv` dans le monde Ruby, de `phpenv` dans le monde PHP ou encore de `virtualenv` pour Python. -Le programme s'obtient à l'adresse suivante : [URL]#https://github.com/creationix/nvm#. +Le programme s'obtient à l'adresse suivante : [URL]#https://github.com/nvm-sh/nvm#. [TIP, id="nvm-windows"] .[RemarquePreTitre]#Alternatives# `nvm` pour{nbsp}Windows @@ -183,7 +183,7 @@ pour fonctionner. [subs="+attributes"] .Commande d'installation du logiciel nvm{nbsp}{nvmVersion} ---- -$ curl -L https://github.com/creationix/nvm/raw/{nvmVersion}/install.sh | bash +$ curl -L https://github.com/nvm-sh/nvm/raw/{nvmVersion}/install.sh | bash ---- [TIP] @@ -374,7 +374,7 @@ Node va interpréter ; - menu:Node.js[Node.js command prompt] : un terminal pour exécuter nos programmes écrits en JavaScript. -Si vous utilisez déjà un gestionnaire de paquets comme Scoop ([URL]#http://scoop.sh#) +Si vous utilisez déjà un gestionnaire de paquets comme Scoop ([URL]#https://scoop.sh#) ou Chocolatey ([URL]#https://chocolatey.org#), le chemin d'installation vers Node s'en trouvera réduit à une simple commande : @@ -504,7 +504,7 @@ Plusieurs variantes d'images Node se trouvent à notre disposition : [Menu]#Debian# (`node:{v}-wheezy`):: Comme [Menu]#standard# mais sur des bases Debian différentes, comme Wheezy, Stretch, etc.. [Menu]#Alpine# (`node:{v}-alpine`):: - Distribution spécialement créée pour Docker ([URL]#http://alpinelinux.org#), qui pèse à peine quelques{nbsp}Mo. + Distribution spécialement créée pour Docker ([URL]#https://alpinelinux.org#), qui pèse à peine quelques{nbsp}Mo. [Menu]#Allégée# (`node:{v}-slim`):: Base Linux Debian sans outillage parfois nécessaire à des modules Node – utile si vous souhaitez économiser de l'espace disque. @@ -622,7 +622,7 @@ image::images/atom.png[width="85%"] Atom ([URL]#https://atom.io#) est un éditeur de code open-source, multilingue et multi plate-forme, dont le développement a été lancé -par la société commerciale GitHub ([URL]#http://github.com#). +par la société commerciale GitHub ([URL]#https://github.com#). Le logiciel est basé sur Electron, un environnement d'exécution d'applications de bureau reposant sur les technologies web et sur{nbsp}Node ! From 613b6879522ade4feb96a89c764517dfe02bc6c9 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Mon, 6 May 2019 06:55:39 +0200 Subject: [PATCH 07/22] 2.0.0-alpha.2 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3c90fc2e..92afbd6c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "nodebook", - "version": "2.0.0-alpha.1", + "version": "2.0.0-alpha.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 5fae03cd..fef2c310 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nodebook", - "version": "2.0.0-alpha.1", + "version": "2.0.0-alpha.2", "description": "Node.js • Apprendre par la pratique.\nFamiliarisez-vous avec JavaScript, Node.js et l'écosystème de modules npm.\nApprenez à concevoir et à déployer des *applications web* et des *outils en ligne de commande*.", "bin": { "nodebook": "./bin/cli.js" From b67b5a47a03a525b223d7ffe39337b7da9108a56 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Mon, 6 May 2019 07:05:06 +0200 Subject: [PATCH 08/22] =?UTF-8?q?fix(ci):=20corrige=20le=20d=C3=A9ploiemen?= =?UTF-8?q?t=20v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [skip ci] --- .travis.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4ca79dc4..92e7a87c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -83,18 +83,9 @@ deploy: - provider: npm tag: next skip-cleanup: true - tag: latest on: tags: true all-branches: true condition: $TRAVIS_BRANCH =~ ^v2. email: "hi@oncletom.io" api-key: "$NPM_TOKEN" - - provider: npm - skip-cleanup: true - tag: next - on: - tags: true - branch: v2 - email: "hi@oncletom.io" - api-key: "$NPM_TOKEN" From bbdde1cefdb2135abbf33dbed24658fb7e1e07e9 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sun, 5 May 2019 18:48:17 +0200 Subject: [PATCH 09/22] =?UTF-8?q?feat(npm):=20d=C3=A9ploie=20la=20v2=20en?= =?UTF-8?q?=20avant-premi=C3=A8re?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .travis.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.travis.yml b/.travis.yml index 92e7a87c..4ca79dc4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -83,9 +83,18 @@ deploy: - provider: npm tag: next skip-cleanup: true + tag: latest on: tags: true all-branches: true condition: $TRAVIS_BRANCH =~ ^v2. email: "hi@oncletom.io" api-key: "$NPM_TOKEN" + - provider: npm + skip-cleanup: true + tag: next + on: + tags: true + branch: v2 + email: "hi@oncletom.io" + api-key: "$NPM_TOKEN" From d908aa0e063f87aa6bfa0f941924d8274881e1cf Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Tue, 23 Apr 2019 19:45:53 +0200 Subject: [PATCH 10/22] Node.js v12 --- .travis.yml | 6 +- README.md | 2 +- appendix-a/index.adoc | 2 +- appendix-a/package-lock.json | 51 +++-- appendix-a/package.json | 2 +- appveyor.yml | 6 +- chapter-01/index.adoc | 6 +- chapter-02/index.adoc | 12 +- chapter-03/index.adoc | 2 +- chapter-04/index.adoc | 6 +- chapter-05/index.adoc | 4 +- chapter-06/index.adoc | 6 +- chapter-07/examples/upload/send.js | 13 -- chapter-07/index.adoc | 2 +- chapter-07/package-lock.json | 332 ++++++++++++++++++----------- chapter-07/package.json | 6 +- chapter-08/index.adoc | 2 +- chapter-09/index.adoc | 2 +- package.json | 2 +- tests/examples-config.js | 3 - 20 files changed, 263 insertions(+), 204 deletions(-) delete mode 100644 chapter-07/examples/upload/send.js diff --git a/.travis.yml b/.travis.yml index 4ca79dc4..2ff7ddc9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,4 @@ -dist: trusty -sudo: false - +dist: xenial language: node_js cache: npm @@ -10,7 +8,7 @@ addons: packages: - libxml2-utils -node_js: v10 +node_js: v12 env: - npm_version=6 DEBUG=tape-spawn diff --git a/README.md b/README.md index cc59ba23..392498a6 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ des *outils en ligne de commande*. > > Plus de 500 exemples pour apprendre en pratiquant. -✅ **Versions couvertes** • `node v10` • `npm v6`.<br> +✅ **Versions couvertes** • `node v12` • `npm v6`.<br> 📖 **Journal de bord d'écriture** • [2018][journal-2018] • [2017][journal-2017].<br> 🔎 **Lire l'ouvrage** • [sur papier](#sur-papier) • [sur liseuse numérique](#sur-liseuse-numérique) • [sur le web](#sur-le-web) • [sur npm](#avec-nodejs). diff --git a/appendix-a/index.adoc b/appendix-a/index.adoc index caa6cd4b..fbf53e63 100644 --- a/appendix-a/index.adoc +++ b/appendix-a/index.adoc @@ -1,7 +1,7 @@ :appendix-number: A :chapterId: appendix-a :sectnums: -:nodeCurrentVersion: v10 +:nodeCurrentVersion: v12 :npmCurrentVersion: v6 :revdate: {docdate} :sourceDir: ./examples diff --git a/appendix-a/package-lock.json b/appendix-a/package-lock.json index 2fd17824..79546c88 100644 --- a/appendix-a/package-lock.json +++ b/appendix-a/package-lock.json @@ -119,7 +119,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", @@ -2929,13 +2929,13 @@ }, "entities": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/entities/-/entities-1.0.0.tgz", "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", "optional": true }, "htmlparser2": { "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "optional": true, "requires": { @@ -3481,8 +3481,7 @@ "nan": { "version": "2.13.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "optional": true + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" }, "nanomatch": { "version": "1.2.13", @@ -3526,22 +3525,27 @@ "optional": true }, "needle": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", - "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.1.tgz", + "integrity": "sha512-CaLXV3W8Vnbps8ZANqDGz7j4x7Yj1LW4TWF/TQuDfj7Cfx4nAPTvw98qgTevtto1oHDrh3pQkaODbqupXlsWTg==", "requires": { - "debug": "^2.1.2", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" } } }, @@ -3573,9 +3577,9 @@ }, "dependencies": { "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4926,20 +4930,13 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sqlite3": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.6.tgz", - "integrity": "sha512-EqBXxHdKiwvNMRCgml86VTL5TK1i0IKiumnfxykX0gh6H6jaKijAXvE9O1N7+omfNSawR2fOmIyJZcfe8HYWpw==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.7.tgz", + "integrity": "sha512-TGEeSBB8O48bEu8KUUMqzeB22WrfTxzhIf0lFm8wLTo3a6yJBonF2sPKMYrYtOne1F1t9AHAEn+DTISq8WebQg==", "requires": { - "nan": "~2.10.0", + "nan": "^2.12.1", "node-pre-gyp": "^0.11.0", "request": "^2.87.0" - }, - "dependencies": { - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - } } }, "sshpk": { diff --git a/appendix-a/package.json b/appendix-a/package.json index 5bc714e7..c3ae6f6c 100644 --- a/appendix-a/package.json +++ b/appendix-a/package.json @@ -41,7 +41,7 @@ "restify-errors": "^6.1.1", "sanitize-filename": "^1.6.1", "sinon": "^1.10.3", - "sqlite3": "^4.0.6", + "sqlite3": "^4.0.7", "tape": "^4.10.1", "tcomb": "^3.2.29" } diff --git a/appveyor.yml b/appveyor.yml index 08bba3b0..8986a102 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,14 +2,14 @@ image: Visual Studio 2017 environment: matrix: - - nodejs_version: '10' + - nodejs_version: '12' + PLATFORM: 'x64' npm_version: '6' DEBUG: 'tape-spawn' SHARP_IGNORE_GLOBAL_LIBVIPS: '1' install: - - ps: Install-Product node $env:nodejs_version x64 -# - ps: npm install -g "npm@${env:npm_version}" + - ps: Update-NodeJsInstallation (Get-NodeJsLatestBuild $env:nodejs_version) $env:PLATFORM - npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" - npm config set prefer-offline true - npm install diff --git a/chapter-01/index.adoc b/chapter-01/index.adoc index d04db25a..d1f6763a 100644 --- a/chapter-01/index.adoc +++ b/chapter-01/index.adoc @@ -1,10 +1,10 @@ :chapter-number: 1 :chapterId: chapter-01 :sourceDir: ./examples -:nodeCurrentVersion: v10 +:nodeCurrentVersion: v12 :npmCurrentVersion: v6 -:npmModulesCount: 782{nbsp}000 -:nodeContributorsCount: 2{nbsp}000 +:npmModulesCount: 967{nbsp}000 +:nodeContributorsCount: 2{nbsp}400 :sectnums: :revdate: {docdate} :imagesdir: {indir} diff --git a/chapter-02/index.adoc b/chapter-02/index.adoc index 6dbcba08..8adc0c2c 100644 --- a/chapter-02/index.adoc +++ b/chapter-02/index.adoc @@ -2,12 +2,12 @@ :chapterId: chapter-02 :sourceDir: ./examples :npmCurrentVersion: v6 -:nodeCurrentVersion: v10 -:nodePrevVersion: v9 -:nodeV: 10.9.0 -:vNext: 11 -:v: 10 -:nvmVersion: v0.33.11 +:nodeCurrentVersion: v12 +:nodePrevVersion: v11 +:nodeV: 12.0.0 +:vNext: 13 +:v: 12 +:nvmVersion: v0.34.0 :sectnums: :revdate: {docdate} :imagesdir: {indir} diff --git a/chapter-03/index.adoc b/chapter-03/index.adoc index ed8ed34a..e04e7160 100644 --- a/chapter-03/index.adoc +++ b/chapter-03/index.adoc @@ -1,7 +1,7 @@ :chapter-number: 3 :chapterId: chapter-03 :sourceDir: ./examples -:nodeCurrentVersion: v10 +:nodeCurrentVersion: v12 :npmCurrentVersion: v6 :sectnums: :revdate: {docdate} diff --git a/chapter-04/index.adoc b/chapter-04/index.adoc index 966de16d..c6a8895a 100644 --- a/chapter-04/index.adoc +++ b/chapter-04/index.adoc @@ -1,10 +1,10 @@ :chapter-number: 4 :chapterId: chapter-04 :sourceDir: ./examples -:nodeCurrentVersion: v10 -:nodeV: 10.9.0 +:nodeCurrentVersion: v12 +:nodeV: 12.0.0 :npmCurrentVersion: v6 -:npmV: 6.4.0 +:npmV: 6.9.0 :sectnums: :revdate: {docdate} :imagesdir: {indir} diff --git a/chapter-05/index.adoc b/chapter-05/index.adoc index 33efa36b..77f44c31 100644 --- a/chapter-05/index.adoc +++ b/chapter-05/index.adoc @@ -2,14 +2,14 @@ :chapterId: chapter-05 :sourceDir: ./examples :httpRoot: http://localhost:3000 -:nodeCurrentVersion: v10 +:nodeCurrentVersion: v12 :npmCurrentVersion: v6 :cowsayVersion: 1.3.1 :lodashVersion: 4.17.11 :mochaVersion: 5.2.0 :serveVersion: 10.0.0 :microVersion: 9.3.3 -:npmvX: 6.4.0 +:npmvX: 6.9.0 :cross: ✘ :tick: ✔ :maybe: ≈ diff --git a/chapter-06/index.adoc b/chapter-06/index.adoc index 4726a2c4..5883d208 100644 --- a/chapter-06/index.adoc +++ b/chapter-06/index.adoc @@ -2,9 +2,9 @@ :chapterId: chapter-06 :sourceDir: ./examples :httpRoot: http://localhost:8000 -:nodeCurrentVersion: v10 -:v: 10 -:nodeNextVersion: v11 +:nodeCurrentVersion: v12 +:v: 12 +:nodeNextVersion: v13 :npmCurrentVersion: v6 :sectnums: :revdate: {docdate} diff --git a/chapter-07/examples/upload/send.js b/chapter-07/examples/upload/send.js deleted file mode 100644 index 1884d4b1..00000000 --- a/chapter-07/examples/upload/send.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -const {post} = require('superagent') -const {readFile} = require('fs').promises; -const {join} = require('path'); -const filepath = join(__dirname, 'hello.txt'); - -readFile(filepath) - .then(data => { - return post('http://localhost:4000') - .attach('hello', data, 'hello.txt') // <1> - }) - .catch(error => console.log(error.message)); diff --git a/chapter-07/index.adoc b/chapter-07/index.adoc index 70b8af08..bf9635de 100644 --- a/chapter-07/index.adoc +++ b/chapter-07/index.adoc @@ -2,7 +2,7 @@ :chapterId: chapter-07 :sourceDir: ./examples :serverUrl: http://localhost:4000 -:nodeCurrentVersion: v10 +:nodeCurrentVersion: v12 :npmCurrentVersion: v6 :sectnums: :revdate: {docdate} diff --git a/chapter-07/package-lock.json b/chapter-07/package-lock.json index f0823b10..9270152d 100644 --- a/chapter-07/package-lock.json +++ b/chapter-07/package-lock.json @@ -1223,9 +1223,9 @@ } }, "expect-ct": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.1.1.tgz", - "integrity": "sha512-ngXzTfoRGG7fYens3/RMb6yYoVLvLMfmsSllP/mZPxNHgFq41TmPSLF/nLY7fwoclI2vElvAmILFWGUYqdjfCg==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.2.0.tgz", + "integrity": "sha512-6SK3MG/Bbhm8MsgyJAylg+ucIOU71/FzyFalcfu5nY19dH8y/z0tBJU0wrNBXD4B27EoQtqPF/9wqH0iYAd04g==" }, "express": { "version": "4.16.4", @@ -1466,9 +1466,9 @@ } }, "feature-policy": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.2.0.tgz", - "integrity": "sha512-2hGrlv6efG4hscYVZeaYjpzpT6I2OZgYqE2yDUzeAcKj2D1SH0AsEzqJNXzdoglEddcIXQQYop3lD97XpG75Jw==" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz", + "integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ==" }, "fill-range": { "version": "4.0.0", @@ -1563,9 +1563,9 @@ } }, "frameguard": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.0.0.tgz", - "integrity": "sha1-e8rUae57lukdEs6zlZx4I1qScuk=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.1.0.tgz", + "integrity": "sha512-TxgSKM+7LTA6sidjOiSZK9wxY0ffMPY3Wta//MqwmX0nZuEHc8QrkV8Fh3ZhMJeiH+Uyh/tcaarImRy8u77O7g==" }, "fresh": { "version": "0.5.2", @@ -1607,22 +1607,26 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "optional": true }, "ansi-regex": { "version": "2.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "optional": true }, "aproba": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "optional": true }, "are-we-there-yet": { "version": "1.1.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "optional": true, "requires": { "delegates": "^1.0.0", @@ -1631,12 +1635,14 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "optional": true }, "brace-expansion": { "version": "1.1.11", - "bundled": true, + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "optional": true, "requires": { "balanced-match": "^1.0.0", @@ -1645,32 +1651,38 @@ }, "chownr": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", "optional": true }, "code-point-at": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "optional": true }, "concat-map": { "version": "0.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "optional": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "optional": true }, "core-util-is": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "optional": true }, "debug": { "version": "2.6.9", - "bundled": true, + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "optional": true, "requires": { "ms": "2.0.0" @@ -1678,22 +1690,26 @@ }, "deep-extend": { "version": "0.6.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "optional": true }, "delegates": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "optional": true }, "detect-libc": { "version": "1.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "optional": true }, "fs-minipass": { "version": "1.2.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "optional": true, "requires": { "minipass": "^2.2.1" @@ -1701,12 +1717,14 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "optional": true }, "gauge": { "version": "2.7.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "optional": true, "requires": { "aproba": "^1.0.3", @@ -1721,7 +1739,8 @@ }, "glob": { "version": "7.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "optional": true, "requires": { "fs.realpath": "^1.0.0", @@ -1734,12 +1753,14 @@ }, "has-unicode": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "optional": true }, "iconv-lite": { "version": "0.4.24", - "bundled": true, + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "optional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -1747,7 +1768,8 @@ }, "ignore-walk": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "optional": true, "requires": { "minimatch": "^3.0.4" @@ -1755,7 +1777,8 @@ }, "inflight": { "version": "1.0.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "optional": true, "requires": { "once": "^1.3.0", @@ -1764,17 +1787,20 @@ }, "inherits": { "version": "2.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "optional": true }, "ini": { "version": "1.3.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "optional": true, "requires": { "number-is-nan": "^1.0.0" @@ -1782,12 +1808,14 @@ }, "isarray": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "optional": true }, "minimatch": { "version": "3.0.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "optional": true, "requires": { "brace-expansion": "^1.1.7" @@ -1795,12 +1823,14 @@ }, "minimist": { "version": "0.0.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "optional": true }, "minipass": { "version": "2.3.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "optional": true, "requires": { "safe-buffer": "^5.1.2", @@ -1809,7 +1839,8 @@ }, "minizlib": { "version": "1.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", "optional": true, "requires": { "minipass": "^2.2.1" @@ -1817,7 +1848,8 @@ }, "mkdirp": { "version": "0.5.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "optional": true, "requires": { "minimist": "0.0.8" @@ -1825,12 +1857,14 @@ }, "ms": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "optional": true }, "needle": { "version": "2.2.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", + "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", "optional": true, "requires": { "debug": "^2.1.2", @@ -1840,7 +1874,8 @@ }, "node-pre-gyp": { "version": "0.10.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", + "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", "optional": true, "requires": { "detect-libc": "^1.0.2", @@ -1857,7 +1892,8 @@ }, "nopt": { "version": "4.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "optional": true, "requires": { "abbrev": "1", @@ -1866,12 +1902,14 @@ }, "npm-bundled": { "version": "1.0.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", + "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==", "optional": true }, "npm-packlist": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz", + "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==", "optional": true, "requires": { "ignore-walk": "^3.0.1", @@ -1880,7 +1918,8 @@ }, "npmlog": { "version": "4.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "optional": true, "requires": { "are-we-there-yet": "~1.1.2", @@ -1891,17 +1930,20 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "optional": true }, "object-assign": { "version": "4.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "optional": true }, "once": { "version": "1.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "optional": true, "requires": { "wrappy": "1" @@ -1909,17 +1951,20 @@ }, "os-homedir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "optional": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "optional": true }, "osenv": { "version": "0.1.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "optional": true, "requires": { "os-homedir": "^1.0.0", @@ -1928,17 +1973,20 @@ }, "path-is-absolute": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "optional": true }, "process-nextick-args": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "optional": true }, "rc": { "version": "1.2.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "optional": true, "requires": { "deep-extend": "^0.6.0", @@ -1949,14 +1997,16 @@ "dependencies": { "minimist": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "optional": true } } }, "readable-stream": { "version": "2.3.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "optional": true, "requires": { "core-util-is": "~1.0.0", @@ -1970,7 +2020,8 @@ }, "rimraf": { "version": "2.6.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "optional": true, "requires": { "glob": "^7.1.3" @@ -1978,37 +2029,44 @@ }, "safe-buffer": { "version": "5.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "optional": true }, "safer-buffer": { "version": "2.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "optional": true }, "sax": { "version": "1.2.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "optional": true }, "semver": { "version": "5.6.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "optional": true }, "set-blocking": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "optional": true }, "signal-exit": { "version": "3.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "optional": true }, "string-width": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "optional": true, "requires": { "code-point-at": "^1.0.0", @@ -2018,7 +2076,8 @@ }, "string_decoder": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "optional": true, "requires": { "safe-buffer": "~5.1.0" @@ -2026,7 +2085,8 @@ }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "optional": true, "requires": { "ansi-regex": "^2.0.0" @@ -2034,12 +2094,14 @@ }, "strip-json-comments": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "optional": true }, "tar": { "version": "4.4.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", "optional": true, "requires": { "chownr": "^1.1.1", @@ -2053,12 +2115,14 @@ }, "util-deprecate": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "optional": true }, "wide-align": { "version": "1.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "optional": true, "requires": { "string-width": "^1.0.2 || 2" @@ -2066,12 +2130,14 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "optional": true }, "yallist": { "version": "3.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "optional": true } } @@ -2298,23 +2364,23 @@ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" }, "helmet": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.17.0.tgz", - "integrity": "sha512-3cJBDC9G4t2D/tcGfW7Y2pnbBSyAjYShtxTTg0wiXafkkGiK/GJyoCcHwux4kBHzG42nWE+IiXdsX0NtvhPuWw==", + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.18.0.tgz", + "integrity": "sha512-TsKlGE5UVkV0NiQ4PllV9EVfZklPjyzcMEMjWlyI/8S6epqgRT+4s4GHVgc25x0TixsKvp3L7c91HQQt5l0+QA==", "requires": { "depd": "2.0.0", "dns-prefetch-control": "0.1.0", "dont-sniff-mimetype": "1.0.0", - "expect-ct": "0.1.1", - "feature-policy": "0.2.0", - "frameguard": "3.0.0", + "expect-ct": "0.2.0", + "feature-policy": "0.3.0", + "frameguard": "3.1.0", "helmet-crossdomain": "0.3.0", "helmet-csp": "2.7.1", "hide-powered-by": "1.0.0", "hpkp": "2.0.0", "hsts": "2.2.0", "ienoopen": "1.1.0", - "nocache": "2.0.0", + "nocache": "2.1.0", "referrer-policy": "1.2.0", "x-xss-protection": "1.1.0" }, @@ -3185,8 +3251,7 @@ "nan": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", - "optional": true + "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==" }, "nanomatch": { "version": "1.2.13", @@ -3207,13 +3272,28 @@ } }, "needle": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", - "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.1.tgz", + "integrity": "sha512-CaLXV3W8Vnbps8ZANqDGz7j4x7Yj1LW4TWF/TQuDfj7Cfx4nAPTvw98qgTevtto1oHDrh3pQkaODbqupXlsWTg==", "requires": { - "debug": "^2.1.2", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } } }, "negotiator": { @@ -3283,9 +3363,9 @@ } }, "nocache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz", - "integrity": "sha1-ICtIAhoMTL3i34DeFaF0Q8i0OYA=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", + "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==" }, "node-gyp": { "version": "3.8.0", @@ -3314,9 +3394,9 @@ } }, "node-pre-gyp": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", - "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", + "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", "requires": { "detect-libc": "^1.0.2", "mkdirp": "^0.5.1", @@ -3485,14 +3565,14 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "npm-bundled": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", - "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==" }, "npm-packlist": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.12.tgz", - "integrity": "sha512-WJKFOVMeAlsU/pjXuqVdzU0WfgtIBCupkEVwn+1Y0ERAbUfWw8R4GjgVbaKnUjRoD2FoQbHOCbOyT5Mbs9Lw4g==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", "requires": { "ignore-walk": "^3.0.1", "npm-bundled": "^1.0.1" @@ -3793,11 +3873,11 @@ "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==" }, "pokemon": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/pokemon/-/pokemon-1.2.3.tgz", - "integrity": "sha512-3wwtG0QKvkje3umDTnaNbPNLmL3XoxdjQwRMz3WEcA/txEagzmWHB1H1TwPNCgZvjIsTrkX7j+DK5Y9+Eu9Xyg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pokemon/-/pokemon-2.0.0.tgz", + "integrity": "sha512-x+c9qNrB5y+2Ltt4mQGG56Rw6AvnzxhRm7/DRX9nSLjurTy+R7gMg3vUxzjJK2AhnaoQeFs3NPyK5fwnM3kVWg==", "requires": { - "unique-random-array": "^1.0.0" + "unique-random-array": "^2.0.0" } }, "posix-character-classes": { @@ -4684,29 +4764,29 @@ "extend-shallow": "^3.0.0" } }, + "sql-template-strings": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/sql-template-strings/-/sql-template-strings-2.2.2.tgz", + "integrity": "sha1-PxFQiiWt384hejBCqdMAwxk7lv8=", + "optional": true + }, "sqlite": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/sqlite/-/sqlite-2.9.3.tgz", - "integrity": "sha512-2LJxdgtXsif9xR2D8KnM8Ki3g0dmOktba1B/6TanYCKx697J0sKfw+i28yRjtjPz5O/uzbEa1m1RXXgR2p9G0Q==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sqlite/-/sqlite-3.0.3.tgz", + "integrity": "sha512-DpofdtBibbiOObtdADGZYE6bvnLpjRG4ut/MDTDau2nK40htOLj1E0c55aOkvbnRVqQ0ZPtjj7PJuKKyS0Ypww==", "requires": { + "sql-template-strings": "^2.2.2", "sqlite3": "^4.0.0" } }, "sqlite3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.4.tgz", - "integrity": "sha512-CO8vZMyUXBPC+E3iXOCc7Tz2pAdq5BWfLcQmOokCOZW5S5sZ/paijiPOCdvzpdP83RroWHYa5xYlVqCxSqpnQg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.7.tgz", + "integrity": "sha512-TGEeSBB8O48bEu8KUUMqzeB22WrfTxzhIf0lFm8wLTo3a6yJBonF2sPKMYrYtOne1F1t9AHAEn+DTISq8WebQg==", "requires": { - "nan": "~2.10.0", - "node-pre-gyp": "^0.10.3", + "nan": "^2.12.1", + "node-pre-gyp": "^0.11.0", "request": "^2.87.0" - }, - "dependencies": { - "nan": { - "version": "2.10.0", - "resolved": "http://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - } } }, "sshpk": { @@ -5073,16 +5153,16 @@ } }, "unique-random": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-random/-/unique-random-1.0.0.tgz", - "integrity": "sha1-zj4iTIJCzTOg53sNcYDXfmti0MQ=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unique-random/-/unique-random-2.1.0.tgz", + "integrity": "sha512-iQ1ZgWac3b8YxGThecQFRQiqgk6xFERRwHZIWeVVsqlbmgCRl0PY13R4mUkodNgctmg5b5odG1nyW/IbOxQTqg==" }, "unique-random-array": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unique-random-array/-/unique-random-array-1.0.1.tgz", - "integrity": "sha512-z9J/SV8CUIhIRROcHe9YUoAT6XthUJt0oUyLGgobiXJprDP9O9dsErNevvSaAv5BkhwFEVPn6nIEOKeNE6Ck1Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-random-array/-/unique-random-array-2.0.0.tgz", + "integrity": "sha512-xR87O95fZ7hljw84J8r1YDXrvffPLWN513BNOP4Bv0KcgG5dyEUrHwsvP7mVAOKg4Y80uqRbpUk0GKr8il70qg==", "requires": { - "unique-random": "^1.0.0" + "unique-random": "^2.1.0" } }, "unique-string": { diff --git a/chapter-07/package.json b/chapter-07/package.json index 4a8aa5eb..e48640cd 100644 --- a/chapter-07/package.json +++ b/chapter-07/package.json @@ -29,18 +29,18 @@ "find-my-way": "^1.18.1", "formidable": "^1.2.1", "get-stream": "^3.0.0", - "helmet": "^3.17.0", + "helmet": "^3.18.0", "micro": "^9.3.4", "mocha": "^5.2.0", "node-sass": "^4.12.0", "nodemon": "^1.19.0", "nunjucks": "^3.2.0", "parseurl": "^1.3.3", - "pokemon": "^1.2.3", + "pokemon": "^2.0.0", "sequelize-cli": "^5.4.0", "serve": "^9.6.0", "sinon": "^6.3.5", - "sqlite": "^2.9.3", + "sqlite": "^3.0.3", "superagent": "^3.8.3" } } diff --git a/chapter-08/index.adoc b/chapter-08/index.adoc index c8686861..a999c3ff 100644 --- a/chapter-08/index.adoc +++ b/chapter-08/index.adoc @@ -1,7 +1,7 @@ :chapter-number: 8 :chapterId: chapter-08 :sourceDir: ./examples -:nodeCurrentVersion: v10 +:nodeCurrentVersion: v12 :npmCurrentVersion: v6 :sectnums: :revdate: {docdate} diff --git a/chapter-09/index.adoc b/chapter-09/index.adoc index 217ced8b..f92753aa 100644 --- a/chapter-09/index.adoc +++ b/chapter-09/index.adoc @@ -2,7 +2,7 @@ :chapterId: chapter-09 :sourceDir: ./examples :httpRoot: http://localhost:4000/examples -:nodeCurrentVersion: v10 +:nodeCurrentVersion: v12 :npmCurrentVersion: v6 :sectnums: :revdate: {docdate} diff --git a/package.json b/package.json index fef2c310..b877e7d4 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "update:schedule": "curl -sSL https://github.com/nodejs/Release/raw/master/schedule.json > chapter-02/schedule.json && npx lts -d $PWD/chapter-02/schedule.json --start $(gdate -d '2 months ago' +'%Y-%m-%d') --end $(gdate -d '2 years' +'%Y-%m-%d') --png chapter-02/images/schedule.png" }, "engines": { - "node": "10", + "node": "12", "npm": "6" }, "repository": { diff --git a/tests/examples-config.js b/tests/examples-config.js index 8363964e..8690e70d 100644 --- a/tests/examples-config.js +++ b/tests/examples-config.js @@ -392,9 +392,6 @@ module.exports = { stderr: 'SQLITE_ERROR: no such table: books', exitCode: 1 }, - 'chapter-07/examples/upload/send.js': { - stderr: 'ExperimentalWarning', - }, 'chapter-07/examples/upload/server.js': { skip: true }, From d4501f37345dfe90e52a3c452a2508156fcc01a4 Mon Sep 17 00:00:00 2001 From: Yoann Fleury <yoann.fleury@yahoo.com> Date: Mon, 27 May 2019 18:22:35 +0200 Subject: [PATCH 11/22] fix(chapter-09): add new link to browserify home closes #407 --- chapter-09/index.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapter-09/index.adoc b/chapter-09/index.adoc index f92753aa..4a416d2b 100644 --- a/chapter-09/index.adoc +++ b/chapter-09/index.adoc @@ -623,7 +623,7 @@ adaptable, modulaire et puissant. Son apprentissage progressif peut faire de lui un allié de choix dans tous vos projets Node et{nbsp}Web. -- [URL]#https://github.com/substack/browserify-handbook# +- [URL]#https://github.com/browserify/browserify-handbook# ==== Revenons maintenant à notre code auquel il manque la compréhension des From 785f2167ad4bbf57c913041ac20f905ab9dbe8fc Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Mon, 12 Nov 2018 13:29:55 +0100 Subject: [PATCH 12/22] =?UTF-8?q?fix(appendix-a):=20met=20=C3=A0=20jour=20?= =?UTF-8?q?htmlhint@0.10.x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appendix-a/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/appendix-a/package-lock.json b/appendix-a/package-lock.json index 79546c88..8f368f7b 100644 --- a/appendix-a/package-lock.json +++ b/appendix-a/package-lock.json @@ -119,7 +119,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", @@ -1142,9 +1142,9 @@ }, "dependencies": { "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "optional": true, "requires": { "fs.realpath": "^1.0.0", @@ -2929,13 +2929,13 @@ }, "entities": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", "optional": true }, "htmlparser2": { "version": "3.8.3", - "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "optional": true, "requires": { From 1537d98c54333f1379acd7399eee6886e4af55e7 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sun, 28 Apr 2019 18:36:00 +0200 Subject: [PATCH 13/22] =?UTF-8?q?feat(appendix-b):=20Nouveaut=C3=A9s=20et?= =?UTF-8?q?=20changements=20dans=20Node.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 +- appendix-b/index.adoc | 147 +++++++++++++++++++++++++++++++++++ appendix-b/package-lock.json | 5 ++ appendix-b/package.json | 18 +++++ book.adoc | 2 + foreword/preamble.adoc | 12 ++- index.adoc | 1 + 7 files changed, 188 insertions(+), 5 deletions(-) create mode 100644 appendix-b/index.adoc create mode 100644 appendix-b/package-lock.json create mode 100644 appendix-b/package.json diff --git a/README.md b/README.md index 392498a6..89504f3c 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,8 @@ des *outils en ligne de commande*. | **[Créer une application web][ch07]** | _ça marche comment HTTP ?_ | [issues][ch07-issues] | **[Créer un outil en ligne de commande][ch08]** | _ça marche comment du code métier dans le terminal ?_ | [issues][ch08-issues] | **[Créer une application frontend][ch09]** | _ça marche comment les modules Node dans les navigateurs web ?_ | [issues][ch09-issues] -| Annexe : **[Sélection de modules npm][a01]** | _quel(s) module(s) npm choisir ou découvrir ?_ | [issues][appendix-issues] +| Annexe A : **[Sélection de modules npm][a01]** | _quel(s) module(s) npm choisir ou découvrir ?_ | [issues][appendix-issues] +| Annexe B : **[Nouveautés et changements dans Node.js][a02]** | _qu'est-ce je dois prendre en compte dans cette nouvelle version ?_ | [issues][appendix-issues] # Lire l'ouvrage @@ -157,6 +158,7 @@ $ npm test | Chapitre 8 | ![][ch08-deps] | ![][ch08-security] | Chapitre 9 | ![][ch09-deps] | ![][ch09-security] | Annexe A | ![][a01-deps] | ![][a01-security] +| Annexe B | ![][a02-deps] | ![][a02-security] ## Génération des épreuves @@ -263,3 +265,7 @@ Les exemples de code sont placés sous la [licence MIT][]. [appendix-issues]: https://github.com/oncletom/nodebook/labels/:book:%20chapitre:annexes [a01-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-a [a01-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-a/package.json +[a02]: appendix-a/index.adoc +[appendix-issues]: https://github.com/oncletom/nodebook/labels/:book:%20chapitre:annexes +[a02-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-b +[a02-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-b/package.json diff --git a/appendix-b/index.adoc b/appendix-b/index.adoc new file mode 100644 index 00000000..6604c713 --- /dev/null +++ b/appendix-b/index.adoc @@ -0,0 +1,147 @@ +:appendix-number: B +:chapterId: appendix-b +:sectnums: +:nodeCurrentVersion: v12 +:npmCurrentVersion: v6 +:revdate: {docdate} +:sourceDir: ./examples +:imagesdir: {indir} +ifdef::env[] +:imagesdir: . +endif::[] + +[appendix] += Nouveautés et changements dans Node.js + +include::../docs/web-header.adoc[] + +Cet ouvrage traite de l'état de l'art d'ECMAScript et des modules Node +tels que nous pouvons les utiliser dans Node {nodeCurrentVersion}. +Certaines évolutions du langage et nouveautés de la plate-forme sont utiles +pour gagner en confort de développement. + +Cette annexe a pour but de vous aider à comprendre les changements techniques +entre les versions majeures de Node, pour que vous puissiez les prendre en compte. +Les changements politiques et organisationnels sont documentés dans +le <<../chapter-01/index.adoc#,chapitre 1>>. + +== Node.js v12 + +La version 12 de Node est sortie le 23 avril 2019. +V8 est mis à niveau en version{nbsp}``7.4``. + +J'ai été particulièrement ravi de bénéficier des changements suivants : + +Modules ESM sans l'option `--experimental-modules`:: + Nous nous rapprochons de plus en plus de modules interopérables entre Node + et les navigateurs Web, sans outillage supplémentaire. + La syntaxe `import`/`export` fonctionne nativement si notre script est + préfixé par `.mjs` (au lieu de `.js`) ou si l'entrée `"type": "module",` + est présente dans le fichier `package.json`. +Amélioration de l'internationalisation native (`Intl`):: + Nous pouvons calculer des dates relatives (exemple : "`il y a 2 jours`") + dans plusieurs langues avec `Intl.RelativeTimeFormat()`. + L'écriture de listes de mots (exemple : "`Un, deux et trois.`") est facilitée + avec l'apparition de `Intl.ListFormat()`. +Itérations asynchrones sur les objets `Stream`:: + La combinaison du concept de <<../chapter-04/index.adoc#stream,flux de données>> + et des <<../chapter-04/index.adoc#events,événements>> n'est ni évidente + ni intuitive. + + La lecture asynchrone d'un flux de données avec + <<../chapter-03/index.adoc#async-await,`async`/`await`>> simplifie la donne. + +Certains aspects de Node ont gagné en rapidité (`process.cwd()`, assertions, +lecture de fichiers avec `fs.readFile()`, le _parsing_ de nos scripts). +D'autres changements sont moins visibles mais contribuent néanmoins +à notre confort de travail : + +Mises à jour de sécurité:: + Support du chiffrement TLSv1.3 pour un support des connexions sécurisées + améliorées, plus rapides et moins gourmandes en ressources. +Remplacement du parseur HTTP:: + La base de code qui interprète les requêtes HTTP entrantes a été entièrement + remplacée par un parseur deux fois plus rapide{nbsp}:{nbsp}``llhttp`` + ([URL]#https://llhttp.org#). +Introduction des diagnostics d'erreur:: + L'option `--experimental-report` active un rapport d'erreur dans un fichier + JSON en cas de plantage applicatif. + Ce fichier reste malgré tout lisible par un humain + Je pense qu'un écosystème d'outillage va se développer pour rendre ces rapports + davantage lisibles et exploitables pour déceler plus finement des bugs applicatifs. + +[NOTE] +.[RemarquePreTitre]#Documentation# Liste exhaustive des changements +==== +Voici une liste de liens pour mieux comprendre ce qui se cache sous le capot +de Node v12 : + +- [URL]#https://v8.dev/blog/v8-release-74# +- [URL]#https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V12.md# +- [URL]#https://wiki.openssl.org/index.php/TLS1.3# +==== + + +== Node.js v10 + +La version 10 de Node est sortie le 24 avril 2018. +V8 est mis à niveau en version{nbsp}``6.6``. + +J'ai été content de passer à cette version de Node pour les raisons suivantes : + +Introduction des promesses natives pour le module `fs`:: + L'objet `fs.promises` propose les mêmes fonctions que `fs`… mais elles + retournent des <<../chapter-03.adoc#promise,promesses>> au lieu de faire + usage des <<../chapter-03/index.adoc#callback,fonctions de rappel>>. + + Voilà de quoi faciliter l'orgation d'opérations typiquement asynchrones. +Création de répertoires de manière récursive:: + La fonction `fs.mkdir()` accepte l'option `recursive` : lorsque sa valeur + vaut `true`, Node crée tous les répertoires nécessaires. + Nous n'avons plus besoin de les créer un par un, ni d'avoir recours + au module{nbsp}``npm`` _mkdirp_ ([URL]#https://npmjs.com/mkdirp#). +Introduction des modules ESM:: + C'est la première fois que l'on peut importer des + <<../chapter-04/index.adoc#esm,modules{nbsp}ECMAScript>> dans Node + sans avoir recours à de l'outillage externe. + Cela nécessite d'utiliser l'option `--experimental-modules` lors d'un appel + à la commande{nbsp}``node``, ainsi que d'avoir recours à l'extension de fichier + `.mjs`… mais c'est un (bon) début. +Introduction de l'internationalisation native (`Intl`):: + Le module d'internationalisation `Intl` entre en scène pour gérer l'affichage + des nombres, devises et dates selon des règles propres à chaque pays. + L'installation de base de Node gère uniquement l'anglais mais il est possible + d'installer des locales supplémentaires, ou de se reposer sur les réglages + du système d'exploitation. +Le module{nbsp}``npm`` en version 6:: + La sixième version majeure du module{nbsp}``npm`` embarque la + commande{nbsp}``npm audit`` qui simplifie la résolution de l'installation + de mises à jour de sécurité. + Les temps d'installation ont été drastiquement réduits. + +Certains aspects de Node ont gagné en rapidité (itération sur les tableaux, +itérations asynchrones, création de serveur DNS, assertions) mais d'autres +changements avancés vont avoir des conséquences intéressantes à moyen et +long{nbsp}terme : + +Module de base `http2`:: + Node supporte désormais nativement la création de serveur http/2. + C'est plus complexe à gérer mais fort heureusement, l'offre de + __frameworks__{nbsp}web va s'adapter pour absorber cette complexité à notre place. +Stabilisation de l'interface `N-API`:: + L'interface `N-API` est une approche bas-niveau pour interfacer du code écrit + en {cpp} directement avec Node, sans script ECMAScript. + Certains modules y ont recours pour des questions de performance… mais aussi + pour expérimenter avec Node, en utilisant une autre machine virtuelle que V8. +Module de base `worker_threads`:: + Il s'agit d'un concept similaire au _Web Workers_ des navigateurs web : + ce module expérimental sert à paralléliser l'exécution d'opérations sans + bloquer le processus principal, et sans créer de nouveau processus indépendant. + +[NOTE] +.[RemarquePreTitre]#Documentation# Liste exhaustive des changements +==== +Voici une liste de liens pour mieux comprendre ce qui se cache sous le capot +de Node v10 : + +- [URL]#https://v8.dev/blog/v8-release-66# +- [URL]#https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V10.md# +==== diff --git a/appendix-b/package-lock.json b/appendix-b/package-lock.json new file mode 100644 index 00000000..96c74feb --- /dev/null +++ b/appendix-b/package-lock.json @@ -0,0 +1,5 @@ +{ + "name": "nodebook.appendix-b", + "version": "2.0.0", + "lockfileVersion": 1 +} diff --git a/appendix-b/package.json b/appendix-b/package.json new file mode 100644 index 00000000..3f5d3b10 --- /dev/null +++ b/appendix-b/package.json @@ -0,0 +1,18 @@ +{ + "name": "nodebook.appendix-b", + "private": true, + "version": "2.0.0", + "description": "", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "engines": { + "node": "^12.0.0" + }, + "author": "Thomas Parisot (https://oncletom.io)", + "license": "MIT", + "bugs": { + "url": "https://github.com/oncletom/nodebook/issues" + }, + "dependencies": {} +} diff --git a/book.adoc b/book.adoc index e796a245..c8dfcf79 100644 --- a/book.adoc +++ b/book.adoc @@ -29,3 +29,5 @@ include::chapter-08/index.adoc[leveloffset=+1] include::chapter-09/index.adoc[leveloffset=+1] include::appendix-a/index.adoc[leveloffset=+1] + +include::appendix-b/index.adoc[leveloffset=+1] diff --git a/foreword/preamble.adoc b/foreword/preamble.adoc index 04ccb8e1..d34c71a4 100644 --- a/foreword/preamble.adoc +++ b/foreword/preamble.adoc @@ -79,7 +79,7 @@ J'ai fait en sorte que la lecture soit progressive, du plus simple au plus compl Le contenu des chapitres explore une problématique et se termine souvent sur une section avancée, pour aller plus{nbsp}loin. -Cette édition est composée de neuf chapitres et d'une annexe : +Cette édition est composée de neuf chapitres : . *Histoire, écosystème et gouvernance* + D'où vient Node et qui sont les acteurs participant à son histoire ? @@ -110,11 +110,15 @@ Cette édition est composée de neuf chapitres et d'une annexe : Utiliser la richesse de l'écosystème{nbsp}npm et profiter des modules pour écrire des applications _front-end_ de qualité. -L'annexe complète l'ouvrage avec une *sélection de modules*{nbsp}npm, -pour démarrer plus vite et mieux cerner ce qu'on peut faire avec{nbsp}Node. +Deux annexes complètent l'ouvrage : +. une *sélection de modules*{nbsp}npm, pour bien démarrer et pour + cerner le potentiel de{nbsp}Node. +. un *historique des nouveautés techniques* des versions majeures de Node + pour adapter votre code aux changements et pour retrouver plus facilement + des explications en lien dans les bons chapitres. [TIP] -.[RemarquePreTitre]#Ressources# Contenu en [line-through]#livre# libre accès +.[RemarquePreTitre]#Ressources# Contenu en libre accès ==== Le contenu de cet ouvrage est actualisé en permanence sur [URL]#https://oncletom.io/node.js/#. diff --git a/index.adoc b/index.adoc index c0ba9395..4128baeb 100644 --- a/index.adoc +++ b/index.adoc @@ -26,6 +26,7 @@ include::docs/description.adoc[] - *Chapitre 8* : <<chapter-08/index.adoc#,Créer un outil en ligne de commande>> - *Chapitre 9* : <<chapter-09/index.adoc#,Créer une application front-end>> - *Annexe A* : <<appendix-a/index.adoc#,Sélection de modules `npm`>> +- *Annexe B* : <<appendix-b/index.adoc#,Nouveautés et changements dans Node.js>> == À propos de l'auteur From 31bd3b2cacdad3c2902fc87a4be20ec19abbe2ca Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sat, 8 Jun 2019 16:35:50 +0200 Subject: [PATCH 14/22] chore: Node 12 dans les package.json --- .nvmrc | 2 +- appendix-a/package.json | 2 +- chapter-01/package.json | 2 +- chapter-02/package.json | 2 +- chapter-03/package.json | 2 +- chapter-04/.eslintrc.yaml | 4 ---- chapter-04/package.json | 2 +- chapter-05/package.json | 2 +- chapter-06/package.json | 2 +- chapter-07/package.json | 2 +- chapter-08/package.json | 2 +- chapter-09/package.json | 2 +- 12 files changed, 11 insertions(+), 15 deletions(-) diff --git a/.nvmrc b/.nvmrc index f599e28b..48082f72 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -10 +12 diff --git a/appendix-a/package.json b/appendix-a/package.json index c3ae6f6c..1bddd055 100644 --- a/appendix-a/package.json +++ b/appendix-a/package.json @@ -7,7 +7,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", diff --git a/chapter-01/package.json b/chapter-01/package.json index bb34343b..d7f40751 100644 --- a/chapter-01/package.json +++ b/chapter-01/package.json @@ -7,7 +7,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "keywords": [ "node", diff --git a/chapter-02/package.json b/chapter-02/package.json index f0471947..1ea52a90 100644 --- a/chapter-02/package.json +++ b/chapter-02/package.json @@ -7,7 +7,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", diff --git a/chapter-03/package.json b/chapter-03/package.json index 50383d8c..55972c6d 100644 --- a/chapter-03/package.json +++ b/chapter-03/package.json @@ -8,7 +8,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", diff --git a/chapter-04/.eslintrc.yaml b/chapter-04/.eslintrc.yaml index cd0ac657..c92e5d67 100644 --- a/chapter-04/.eslintrc.yaml +++ b/chapter-04/.eslintrc.yaml @@ -1,10 +1,6 @@ parserOptions: sourceType: module -globals: - URL: true # Delete when eslint is okay with URL being a global in Node 10.0.0 - # cf. https://github.com/eslint/eslint/issues/10284 - rules: strict: off handle-callback-err: off diff --git a/chapter-04/package.json b/chapter-04/package.json index 0a244b15..46b69cb4 100644 --- a/chapter-04/package.json +++ b/chapter-04/package.json @@ -8,7 +8,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", diff --git a/chapter-05/package.json b/chapter-05/package.json index 7730d54d..c910654b 100644 --- a/chapter-05/package.json +++ b/chapter-05/package.json @@ -12,7 +12,7 @@ "pretest": "npm run lint" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", diff --git a/chapter-06/package.json b/chapter-06/package.json index 8d1989e9..1eb6bad8 100644 --- a/chapter-06/package.json +++ b/chapter-06/package.json @@ -9,7 +9,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", diff --git a/chapter-07/package.json b/chapter-07/package.json index e48640cd..6f11bf7e 100644 --- a/chapter-07/package.json +++ b/chapter-07/package.json @@ -8,7 +8,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", diff --git a/chapter-08/package.json b/chapter-08/package.json index 0c289faa..547dd279 100644 --- a/chapter-08/package.json +++ b/chapter-08/package.json @@ -15,7 +15,7 @@ "test": "tape examples/**/*.test.js" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", diff --git a/chapter-09/package.json b/chapter-09/package.json index 4c04451a..e8b9a197 100644 --- a/chapter-09/package.json +++ b/chapter-09/package.json @@ -23,7 +23,7 @@ "test:browser": "./node_modules/.bin/karma start" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", From 2ea2bf3cbd9f01ad5e273515e2e979aa5f267c03 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sat, 8 Jun 2019 17:15:23 +0200 Subject: [PATCH 15/22] =?UTF-8?q?feat(cli):=20active=20l'autocompl=C3=A9ti?= =?UTF-8?q?on=20du=20CLI=20nodebook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes #364 --- bin/cli.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/bin/cli.js b/bin/cli.js index 26a67187..98cbcc99 100755 --- a/bin/cli.js +++ b/bin/cli.js @@ -9,8 +9,10 @@ const yargs = require('yargs'); updateNotifier(pkg) .then(update => { if (update) { - console.log('🙂 Une nouvelle version de \x1B[32;1mnodebook\x1B[0m est disponible.'); - console.log('👉 Tape \x1B[33;1mnpm install --global nodebook\x1B[0m pour l\'installer.'); + const {name} = pkg; + const {latest} = update; + console.log(`💡 La version \x1B[32;1m${name}\x1B[0m@${latest} est disponible.`); + console.log(`👉 Pour en bénéficier : \x1B[33;1mnpm install --global ${name}\x1B[0m`); } }) .catch(err => err) @@ -20,10 +22,12 @@ updateNotifier(pkg) .scriptName('nodebook') .commandDir('commands') .usage('nodebook [command]') + .completion('autocomplete', 'Affiche le script d\'autocomplétion des commandes') .example('nodebook install chapter-04', 'Installe les dépendances du chapitre 4') .example('nodebook install all', 'Installe les dépendances de tous les chapitres') .example('cd $(nodebook dir chapter-04)', 'Place le terminal dans le répertoire d\'exemples du chapitre 4') .example('cd $(nodebook dir chapter-04 --root)', 'Place le terminal dans le répertoire racine du chapitre 4') + .example('nodebook autocomplete >> ~/.bashrc', 'Installe le script d\'autocomplétion des commandes (shell bash)') .demandCommand(1, '') .recommendCommands() .strict() From b07b3eda34c2f12549f0f9b1249aabffeb00b497 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sat, 8 Jun 2019 17:15:34 +0200 Subject: [PATCH 16/22] =?UTF-8?q?chore:=20mise=20=C3=A0=20jour=20des=20d?= =?UTF-8?q?=C3=A9pendances?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 2046 ++++++--------------------------------------- package.json | 12 +- 2 files changed, 255 insertions(+), 1803 deletions(-) diff --git a/package-lock.json b/package-lock.json index 92afbd6c..60931869 100644 --- a/package-lock.json +++ b/package-lock.json @@ -104,7 +104,8 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, "ansi-styles": { "version": "2.2.1", @@ -113,24 +114,13 @@ "dev": true }, "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.0.2.tgz", + "integrity": "sha512-rUe9SxpRQlVg4EM8It7JMNWWYHAirTPpbTuvaSKybb5IejNgWB3PGBBX9rrPKDx2pM/p3Wh+7+ASaWRyyAbxmQ==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, "argparse": { @@ -142,24 +132,6 @@ "sprintf-js": "~1.0.2" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, "array-filter": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", @@ -188,12 +160,6 @@ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", "dev": true }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, "asciidoctor-converter-opendocument": { "version": "1.0.0-alpha.12", "resolved": "https://registry.npmjs.org/asciidoctor-converter-opendocument/-/asciidoctor-converter-opendocument-1.0.0-alpha.12.tgz", @@ -214,6 +180,22 @@ "requires": { "glob": "7.1.3", "unxhr": "1.0.1" + }, + "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "asciidoctor-prism-extension": { @@ -225,12 +207,6 @@ "prismjs": "^1.15.0" } }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -238,15 +214,9 @@ "dev": true }, "async-each": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.2.tgz", - "integrity": "sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, "balanced-match": { @@ -254,65 +224,10 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", "dev": true }, "blue-tape": { @@ -334,32 +249,12 @@ } }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "fill-range": "^7.0.1" } }, "buffer-shims": { @@ -368,23 +263,6 @@ "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", "dev": true }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, "callsites": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", @@ -392,9 +270,9 @@ "dev": true }, "camelcase": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.0.tgz", - "integrity": "sha512-Y05ICatFYPAfykDIB7VdwSJ0LUl1yq/BwO2OpyGGLjiRe1fgzTwVypPiWnzkGFOVFHXrCXUNBl86bpjBhZWSJg==" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "chalk": { "version": "1.1.3", @@ -416,46 +294,20 @@ "dev": true }, "chokidar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", - "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.0.1.tgz", + "integrity": "sha512-2ww34sJWehnbpV0Q4k4V5Hh7juo7po6z7LUWkcIQnSGN1lHOL8GGtLtfwabKvLFQw/hbSUQ0u6V7OgGYgBzlkQ==", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", + "anymatch": "^3.0.1", + "async-each": "^1.0.3", + "braces": "^3.0.2", + "fsevents": "^2.0.6", + "glob-parent": "^5.0.0", + "is-binary-path": "^2.1.0", + "is-glob": "^4.0.1", "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "readdirp": "^3.0.2" } }, "cli-cursor": { @@ -492,26 +344,36 @@ } }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } } } @@ -522,26 +384,10 @@ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -549,26 +395,13 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -600,12 +433,6 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", @@ -642,47 +469,6 @@ "object-keys": "^1.0.8" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", @@ -885,18 +671,18 @@ } }, "eslint-plugin-react": { - "version": "7.12.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", - "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.13.0.tgz", + "integrity": "sha512-uA5LrHylu8lW/eAH3bEQe9YdzpPaFd9yAJTwTi/i/BKTD7j6aQMKVAdGM/ML72zD6womuSK7EiGtMKuK06lWjQ==", "dev": true, "requires": { "array-includes": "^3.0.3", "doctrine": "^2.1.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1", + "jsx-ast-utils": "^2.1.0", "object.fromentries": "^2.0.0", - "prop-types": "^15.6.2", - "resolve": "^1.9.0" + "prop-types": "^15.7.2", + "resolve": "^1.10.1" }, "dependencies": { "doctrine": { @@ -1016,62 +802,6 @@ "util-extend": "^1.0.1" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "external-editor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", @@ -1083,71 +813,6 @@ "tmp": "^0.0.33" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", @@ -1185,39 +850,25 @@ } }, "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "to-regex-range": "^5.0.1" } }, "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", "unpipe": "~1.0.0" } }, @@ -1255,27 +906,12 @@ "is-function": "~1.0.0" } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -1287,574 +923,33 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz", + "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==", "dev": true, - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-port": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.0.0.tgz", - "integrity": "sha512-imzMU0FjsZqNa6BqOjbbW6w5BivHIuQKopjpPqcnx0AVHJQKCxK1O+Ab3OrVXhrekqfVMjwA9ZYu062R+KcIsQ==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-port": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.0.0.tgz", + "integrity": "sha512-imzMU0FjsZqNa6BqOjbbW6w5BivHIuQKopjpPqcnx0AVHJQKCxK1O+Ab3OrVXhrekqfVMjwA9ZYu062R+KcIsQ==", "requires": { "type-fest": "^0.3.0" } @@ -1867,16 +962,10 @@ "pump": "^3.0.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1887,24 +976,12 @@ } }, "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "is-glob": "^4.0.1" } }, "globals": { @@ -1923,12 +1000,6 @@ "delegate": "^3.1.2" } }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, "has": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", @@ -1959,54 +1030,16 @@ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "dev": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "requires": { - "depd": "1.1.1", + "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - } + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" } }, "iconv-lite": { @@ -2131,98 +1164,27 @@ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "^2.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, "is-callable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", "dev": true }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2259,33 +1221,10 @@ } }, "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-promise": { "version": "2.1.0", @@ -2313,12 +1252,6 @@ "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", "dev": true }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -2330,12 +1263,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2371,20 +1298,14 @@ "dev": true }, "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.1.0.tgz", + "integrity": "sha512-yDGDG2DS4JcqhA6blsuYbtsT09xL8AoLuUR2Gb5exrw7UEM19sBcOTq+YBBhrNbl0PUC4R4LnFu+dHg2HKeVvA==", "dev": true, "requires": { "array-includes": "^3.0.3" } }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, "lcid": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", @@ -2475,21 +1396,6 @@ "p-defer": "^1.0.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, "mem": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", @@ -2507,31 +1413,10 @@ } } }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mimic-fn": { "version": "1.2.0", @@ -2552,27 +1437,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -2599,33 +1463,7 @@ "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } + "dev": true }, "natural-compare": { "version": "1.4.0", @@ -2684,7 +1522,8 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true }, "object-assign": { "version": "4.1.1", @@ -2692,37 +1531,6 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "object-inspect": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.3.0.tgz", @@ -2735,15 +1543,6 @@ "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", "dev": true }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, "object.fromentries": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", @@ -2808,22 +1607,13 @@ } }, "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true } } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -2950,9 +1740,9 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-is-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" }, "p-limit": { "version": "2.2.0", @@ -2991,21 +1781,9 @@ "dev": true }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "path-exists": { "version": "3.0.0", @@ -3034,18 +1812,18 @@ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", "dev": true }, + "picomatch": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", + "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", + "dev": true + }, "plur": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz", "integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=", "dev": true }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -3111,9 +1889,9 @@ "dev": true }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "rc": { "version": "1.2.8", @@ -3133,9 +1911,9 @@ "dev": true }, "react-is": { - "version": "16.8.3", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.3.tgz", - "integrity": "sha512-Y4rC1ZJmsxxkkPuMLwvKvlL1Zfpbcu+Bf4ZigkHup3v9EfdYhAlWAaVyA19olXq2o2mGn0w+dFKvk3pVVlYcIA==", + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", + "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", "dev": true }, "readable-stream": { @@ -3154,24 +1932,12 @@ } }, "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.0.2.tgz", + "integrity": "sha512-LbyJYv48eywrhOlScq16H/VkCiGKGPC2TpOdZCJ7QXnYEjn3NN/Oblh8QEU3vqfSRBB7OGvh5x45NKiVeNujIQ==", "dev": true, "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "picomatch": "^2.0.4" } }, "regexpp": { @@ -3197,18 +1963,6 @@ "rc": "^1.0.1" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", @@ -3226,9 +1980,9 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -3248,12 +2002,6 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -3273,12 +2021,6 @@ "through": "~2.3.4" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -3311,15 +2053,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -3339,9 +2072,9 @@ "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" }, "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -3350,23 +2083,30 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } } }, "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.17.1" } }, "set-blocking": { @@ -3374,33 +2114,10 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, "shebang-command": { "version": "1.2.0", @@ -3454,138 +2171,6 @@ } } }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, "split": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", @@ -3595,51 +2180,22 @@ "through": "2" } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -3648,12 +2204,14 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -3684,6 +2242,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -3919,48 +2478,20 @@ "os-tmpdir": "~1.0.2" } }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, "trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", @@ -3987,98 +2518,17 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, "unxhr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unxhr/-/unxhr-1.0.1.tgz", "integrity": "sha512-MAhukhVHyaLGDjyDYhy8gVjWJyhTECCdNsLwlMoGFoNJ3o79fpQhtQuzmAE4IxCMDwraF4cW8ZjpAV0m9CRQbg==", "dev": true }, - "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", - "dev": true - }, "update-check": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.3.tgz", @@ -4097,18 +2547,6 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4150,30 +2588,44 @@ "dev": true }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "number-is-nan": "^1.0.0" + "color-convert": "^1.9.0" } }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "ansi-regex": "^4.1.0" } } } @@ -4204,11 +2656,11 @@ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, "yargs": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", - "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", "requires": { - "cliui": "^4.0.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", "os-locale": "^3.1.0", @@ -4218,7 +2670,7 @@ "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.0.0" + "yargs-parser": "^13.1.0" }, "dependencies": { "ansi-regex": { @@ -4247,9 +2699,9 @@ } }, "yargs-parser": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", - "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.0.tgz", + "integrity": "sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" diff --git a/package.json b/package.json index b877e7d4..b8d5278b 100644 --- a/package.json +++ b/package.json @@ -48,12 +48,12 @@ }, "homepage": "https://oncletom.io/node.js/", "dependencies": { - "finalhandler": "^1.1.1", + "finalhandler": "^1.1.2", "get-port": "^5.0.0", - "glob": "^7.1.3", - "serve-static": "^1.13.2", + "glob": "^7.1.4", + "serve-static": "^1.14.1", "update-check": "^1.5.3", - "yargs": "^13.2.2" + "yargs": "^13.2.4" }, "devDependencies": { "@asciidoctor/core": "^2.0.3", @@ -62,9 +62,9 @@ "asciidoctor-extension-interactive-runner": "^1.2.3", "asciidoctor-prism-extension": "^2.0.6", "blue-tape": "^1.0.0", - "chokidar": "^2.1.5", + "chokidar": "^3.0.1", "eslint": "^5.16.0", - "eslint-plugin-react": "^7.12.4", + "eslint-plugin-react": "^7.13.0", "ora": "^3.4.0", "tap-spec": "^5.0.0", "tape-spawn": "^1.4.2" From 2fe246c7c91c2883f27eeef169356abce8b0589a Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sat, 8 Jun 2019 17:16:14 +0200 Subject: [PATCH 17/22] =?UTF-8?q?feat(chapter-08):=20ajustement=20des=20in?= =?UTF-8?q?structions=20d'autocompl=C3=A9tion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refs #364 --- chapter-08/index.adoc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/chapter-08/index.adoc b/chapter-08/index.adoc index a999c3ff..13b20ec7 100644 --- a/chapter-08/index.adoc +++ b/chapter-08/index.adoc @@ -2017,8 +2017,9 @@ $ npm install --global $(nodebook dir chapter-08 --root) Le mécanisme d'autocomplétion est fourni par l'environnement d'exécution de notre terminal, le _shell_. Sous Linux et macOS, il s'agit de _bash_, de _zsh_ ou plus rarement, de _fish_. -Il "`suffit`" donc d'interconnecter notre programme exécutable pour qu'il fournisse -les résultats de complétion au mécanisme de notre _shell_. +Il "`suffit`" donc d'interconnecter notre programme exécutable Node avec +le système d'exploitation — ce dernier envoie des signaux et attend des résultats +d'autocomplétion en retour. [subs="+macros"] ---- @@ -2079,7 +2080,7 @@ indexterm:[module npm, yargs] Il embarque un module d'autocomplétion. Si vous utilisez déjà ce module, l'autocomplétion revient à ajouter une ligne de code à notre programme. -Elle est un peu plus basique et demande plus de travail pour +Elle est un peu plus basique et demande davantage de travail pour arriver à la qualité des résultats du module _omelette_. [subs="+macros"] From 770679119f177b0cf58cfc9b5e6d54d92d9cfdb6 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sat, 8 Jun 2019 17:48:06 +0200 Subject: [PATCH 18/22] fix(chapter-02): clarification des instructions d'installation de nvm sous macOS fix #403 --- chapter-02/index.adoc | 56 ++++++++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/chapter-02/index.adoc b/chapter-02/index.adoc index 8adc0c2c..bc73331f 100644 --- a/chapter-02/index.adoc +++ b/chapter-02/index.adoc @@ -316,16 +316,23 @@ indexterm:[installation, homebrew] Un installeur officiel pour macOS est fourni sur le site de Node, à l'adresse [URL]#https://nodejs.org/fr/download/#. -<<nvm,nvm>> est la voie alternative recommandée pour gérer plusieurs versions -de Node en parallèle. - -Il est toutefois possible d'installer Node et `nvm` via le gestionnaire de -paquets Homebrew ([URL]#https://brew.sh#). -Il aide à installer des logiciels qui ne sont pas distribués via le -_Mac{nbsp}App{nbsp}Store_. - -. Installer les _Command Line Tools_ pour compiler des logiciels depuis leur code source. -. Installation Homebrew. +<<nvm,nvm>> est la voie alternative que je recommande pour installer Node +mais aussi pour gérer plusieurs versions de Node en parallèle. +Lisez la suite de cette section si le gestionnaire de paquets Homebrew ([URL]#https://brew.sh#) +vous est familier, sinon rendez-vous à la section +`"<<nvm,Plusieurs versions sur la même machine{nbsp}(nvm)>>`" pour y découvrir +les instructions classiques d'installation. + +Homebrew est la voie royale pour installer{nbsp}`nvm`. +C'est l'outil que j'utilise au quotidien pour installer mes logiciels macOS, +ceux en ligne de commande et ceux avec une interface graphique, +qui ne sont pas distribués sur le _Mac{nbsp}App{nbsp}Store_. + +L'installation des _Command Line Tools_ est un pré-requis. +Ce sont utilitaires distribués par Apple pour transformer un ordinateur +grand{nbsp}public en outil de travail pour développeur·se. +On y retrouve Git et des compilateurs comme GCC, entre autres. + +C'est une installation qui se fait une bonne fois pour toutes. .Installation des Command Line Tools et de Homebrew sous macOS ---- @@ -333,20 +340,35 @@ $ xcode-select --install $ /usr/bin/ruby -e "$(curl -fsSL https://git.io/brew-install)" ---- -Pour installer `nvm`, il suffit alors de lancer la commande suivante : +Enfin, l'installation de `nvm` peut s'effectuer avec la commande suivante : ---- $ brew install nvm ---- -Ou, pour installer une seule version de Node, la plus récente : +Vous pouvez vérifier que le programme répond comme prévu avec cette commande : + +[subs="+attributes"] +---- +$ nvm --version +{nvmVersion} +---- + +Une dernière manipulation est nécessaire pour intégrer `nvm` de manière +permanente à notre terminal. +Ajoutez les lignes suivantes à la fin du fichier `~/.bashrc` (par défaut), +ou `~/.zshrc` (si vous avez installé votre propre _shell_) : +.{blank}~/.bashrc ou ~/.zshrc ---- -$ brew install node +# (...) + +export NVM_DIR="$HOME/.nvm" +. "/usr/local/opt/nvm/nvm.sh" +. "/usr/local/opt/nvm/etc/bash_completion" ---- -Vous obtiendrez des options d'installation et de configuration en tapant -`brew info nvm` et/ou `brew info node`. +Vous êtes maintenant paré·e à utiliser Node sur votre Mac ! === Windows indexterm:[installation, Windows] @@ -354,8 +376,8 @@ indexterm:[installation, Windows] Un installeur officiel pour Windows est fourni sur le site de Node à l'adresse [URL]#https://nodejs.org/fr/download/#. -<<nvm,`nvm-windows`>> est la voie alternative recommandée pour gérer plusieurs -versions de Node en parallèle. +<<nvm,`nvm-windows`>> est la voie alternative que je recommande pour installer +Node mais aussi pour gérer plusieurs versions de Node en parallèle. .Un des écrans d'installation de Node sous{nbsp}Windows{nbsp}10 image::images/windows-node-installer.png[width="50%"] From 5b880739ce24be908b0b4ccd3b5ec2aab815c867 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sun, 28 Apr 2019 18:48:34 +0200 Subject: [PATCH 19/22] =?UTF-8?q?feat(appendix-c):=20Utilisation=20de=20ce?= =?UTF-8?q?t=20ouvrage=20gr=C3=A2ce=20au=20module=20nodebook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++++-- appendix-c/index.adoc | 29 +++++++++++++++++++++++++++++ appendix-c/package-lock.json | 5 +++++ appendix-c/package.json | 18 ++++++++++++++++++ book.adoc | 2 ++ index.adoc | 1 + 6 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 appendix-c/index.adoc create mode 100644 appendix-c/package-lock.json create mode 100644 appendix-c/package.json diff --git a/README.md b/README.md index 89504f3c..9b4b7da4 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ des *outils en ligne de commande*. | **[Créer une application frontend][ch09]** | _ça marche comment les modules Node dans les navigateurs web ?_ | [issues][ch09-issues] | Annexe A : **[Sélection de modules npm][a01]** | _quel(s) module(s) npm choisir ou découvrir ?_ | [issues][appendix-issues] | Annexe B : **[Nouveautés et changements dans Node.js][a02]** | _qu'est-ce je dois prendre en compte dans cette nouvelle version ?_ | [issues][appendix-issues] +| Annexe C : **[Utilisation de cet ouvrage grâce au module npm{nbsp}nodebook][a03]** | _ça marche comment l'exécution des exemples du livre depuis mon terminal ?_ | [issues][appendix-issues] # Lire l'ouvrage @@ -159,6 +160,7 @@ $ npm test | Chapitre 9 | ![][ch09-deps] | ![][ch09-security] | Annexe A | ![][a01-deps] | ![][a01-security] | Annexe B | ![][a02-deps] | ![][a02-security] +| Annexe C | ![][a03-deps] | ![][a03-security] ## Génération des épreuves @@ -265,7 +267,9 @@ Les exemples de code sont placés sous la [licence MIT][]. [appendix-issues]: https://github.com/oncletom/nodebook/labels/:book:%20chapitre:annexes [a01-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-a [a01-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-a/package.json -[a02]: appendix-a/index.adoc -[appendix-issues]: https://github.com/oncletom/nodebook/labels/:book:%20chapitre:annexes +[a02]: appendix-b/index.adoc [a02-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-b [a02-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-b/package.json +[a03]: appendix-c/index.adoc +[a03-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-c +[a03-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-c/package.json diff --git a/appendix-c/index.adoc b/appendix-c/index.adoc new file mode 100644 index 00000000..7d22ed7b --- /dev/null +++ b/appendix-c/index.adoc @@ -0,0 +1,29 @@ +:appendix-number: C +:chapterId: appendix-c +:sectnums: +:nodeCurrentVersion: v12 +:npmCurrentVersion: v6 +:revdate: {docdate} +:sourceDir: ./examples +:imagesdir: {indir} +ifdef::env[] +:imagesdir: . +endif::[] + +[appendix] += Utilisation de cet ouvrage grâce au module npm{nbsp}nodebook + +include::../docs/web-header.adoc[] + + +include::../docs/tip-versions.adoc[] + +== Pourquoi utiliser le module{nbsp}nodebook{nbsp}? + +TBD. + +== Installation + +TBD. + +== diff --git a/appendix-c/package-lock.json b/appendix-c/package-lock.json new file mode 100644 index 00000000..cf52247b --- /dev/null +++ b/appendix-c/package-lock.json @@ -0,0 +1,5 @@ +{ + "name": "nodebook.appendix-c", + "version": "2.0.0", + "lockfileVersion": 1 +} diff --git a/appendix-c/package.json b/appendix-c/package.json new file mode 100644 index 00000000..2c930b4c --- /dev/null +++ b/appendix-c/package.json @@ -0,0 +1,18 @@ +{ + "name": "nodebook.appendix-c", + "private": true, + "version": "2.0.0", + "description": "", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "engines": { + "node": "^12.0.0" + }, + "author": "Thomas Parisot (https://oncletom.io)", + "license": "MIT", + "bugs": { + "url": "https://github.com/oncletom/nodebook/issues" + }, + "dependencies": {} +} diff --git a/book.adoc b/book.adoc index c8dfcf79..29e2f4cb 100644 --- a/book.adoc +++ b/book.adoc @@ -31,3 +31,5 @@ include::chapter-09/index.adoc[leveloffset=+1] include::appendix-a/index.adoc[leveloffset=+1] include::appendix-b/index.adoc[leveloffset=+1] + +include::appendix-c/index.adoc[leveloffset=+1] diff --git a/index.adoc b/index.adoc index 4128baeb..45f1b67b 100644 --- a/index.adoc +++ b/index.adoc @@ -27,6 +27,7 @@ include::docs/description.adoc[] - *Chapitre 9* : <<chapter-09/index.adoc#,Créer une application front-end>> - *Annexe A* : <<appendix-a/index.adoc#,Sélection de modules `npm`>> - *Annexe B* : <<appendix-b/index.adoc#,Nouveautés et changements dans Node.js>> +- *Annexe C* : <<appendix-c/index.adoc#,Utilisation de cet ouvrage grâce au module `npm` nodebook>> == À propos de l'auteur From a89738241d61f6178bc9d489dd7e653079cb6d78 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sun, 28 Apr 2019 18:36:00 +0200 Subject: [PATCH 20/22] =?UTF-8?q?feat(appendix-b):=20Nouveaut=C3=A9s=20et?= =?UTF-8?q?=20changements=20dans=20Node.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 9b4b7da4..5af22990 100644 --- a/README.md +++ b/README.md @@ -160,7 +160,10 @@ $ npm test | Chapitre 9 | ![][ch09-deps] | ![][ch09-security] | Annexe A | ![][a01-deps] | ![][a01-security] | Annexe B | ![][a02-deps] | ![][a02-security] +<<<<<<< HEAD | Annexe C | ![][a03-deps] | ![][a03-security] +======= +>>>>>>> feat(appendix-b): Nouveautés et changements dans Node.js ## Génération des épreuves @@ -267,9 +270,16 @@ Les exemples de code sont placés sous la [licence MIT][]. [appendix-issues]: https://github.com/oncletom/nodebook/labels/:book:%20chapitre:annexes [a01-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-a [a01-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-a/package.json +<<<<<<< HEAD [a02]: appendix-b/index.adoc [a02-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-b [a02-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-b/package.json [a03]: appendix-c/index.adoc [a03-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-c [a03-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-c/package.json +======= +[a02]: appendix-a/index.adoc +[appendix-issues]: https://github.com/oncletom/nodebook/labels/:book:%20chapitre:annexes +[a02-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-b +[a02-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-b/package.json +>>>>>>> feat(appendix-b): Nouveautés et changements dans Node.js From a0f0317f99e6927bf494ace9c687b45dbf762538 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sun, 28 Apr 2019 18:48:34 +0200 Subject: [PATCH 21/22] =?UTF-8?q?feat(appendix-c):=20Utilisation=20de=20ce?= =?UTF-8?q?t=20ouvrage=20gr=C3=A2ce=20au=20module=20nodebook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 5af22990..b501f18f 100644 --- a/README.md +++ b/README.md @@ -161,9 +161,13 @@ $ npm test | Annexe A | ![][a01-deps] | ![][a01-security] | Annexe B | ![][a02-deps] | ![][a02-security] <<<<<<< HEAD +<<<<<<< HEAD | Annexe C | ![][a03-deps] | ![][a03-security] ======= >>>>>>> feat(appendix-b): Nouveautés et changements dans Node.js +======= +| Annexe C | ![][a03-deps] | ![][a03-security] +>>>>>>> feat(appendix-c): Utilisation de cet ouvrage grâce au module nodebook ## Génération des épreuves @@ -271,6 +275,7 @@ Les exemples de code sont placés sous la [licence MIT][]. [a01-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-a [a01-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-a/package.json <<<<<<< HEAD +<<<<<<< HEAD [a02]: appendix-b/index.adoc [a02-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-b [a02-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-b/package.json @@ -283,3 +288,11 @@ Les exemples de code sont placés sous la [licence MIT][]. [a02-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-b [a02-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-b/package.json >>>>>>> feat(appendix-b): Nouveautés et changements dans Node.js +======= +[a02]: appendix-b/index.adoc +[a02-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-b +[a02-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-b/package.json +[a03]: appendix-c/index.adoc +[a03-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-c +[a03-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-c/package.json +>>>>>>> feat(appendix-c): Utilisation de cet ouvrage grâce au module nodebook From ecf266e6b3df022ba43d42b58471b90728ab3724 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Mon, 29 Apr 2019 15:38:23 +0200 Subject: [PATCH 22/22] =?UTF-8?q?feat(appendix-d):=20Une=20cha=C3=AEne=20d?= =?UTF-8?q?e=20publication=20bas=C3=A9e=20sur=20Node.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 28 ++++---------------- appendix-d/index.adoc | 51 ++++++++++++++++++++++++++++++++++++ appendix-d/package-lock.json | 5 ++++ appendix-d/package.json | 18 +++++++++++++ 4 files changed, 79 insertions(+), 23 deletions(-) create mode 100644 appendix-d/index.adoc create mode 100644 appendix-d/package-lock.json create mode 100644 appendix-d/package.json diff --git a/README.md b/README.md index b501f18f..a0a9bc6b 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ des *outils en ligne de commande*. | Annexe A : **[Sélection de modules npm][a01]** | _quel(s) module(s) npm choisir ou découvrir ?_ | [issues][appendix-issues] | Annexe B : **[Nouveautés et changements dans Node.js][a02]** | _qu'est-ce je dois prendre en compte dans cette nouvelle version ?_ | [issues][appendix-issues] | Annexe C : **[Utilisation de cet ouvrage grâce au module npm{nbsp}nodebook][a03]** | _ça marche comment l'exécution des exemples du livre depuis mon terminal ?_ | [issues][appendix-issues] +| Annexe D : **[Une chaîne de publication basée sur Node.js][a04]** | _comment est-ce que cet ouvrage est conçu en utilisant Node.js ?_ | [issues][appendix-issues] # Lire l'ouvrage @@ -160,14 +161,8 @@ $ npm test | Chapitre 9 | ![][ch09-deps] | ![][ch09-security] | Annexe A | ![][a01-deps] | ![][a01-security] | Annexe B | ![][a02-deps] | ![][a02-security] -<<<<<<< HEAD -<<<<<<< HEAD | Annexe C | ![][a03-deps] | ![][a03-security] -======= ->>>>>>> feat(appendix-b): Nouveautés et changements dans Node.js -======= -| Annexe C | ![][a03-deps] | ![][a03-security] ->>>>>>> feat(appendix-c): Utilisation de cet ouvrage grâce au module nodebook +| Annexe D | ![][a04-deps] | ![][a04-security] ## Génération des épreuves @@ -274,25 +269,12 @@ Les exemples de code sont placés sous la [licence MIT][]. [appendix-issues]: https://github.com/oncletom/nodebook/labels/:book:%20chapitre:annexes [a01-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-a [a01-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-a/package.json -<<<<<<< HEAD -<<<<<<< HEAD -[a02]: appendix-b/index.adoc -[a02-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-b -[a02-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-b/package.json -[a03]: appendix-c/index.adoc -[a03-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-c -[a03-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-c/package.json -======= -[a02]: appendix-a/index.adoc -[appendix-issues]: https://github.com/oncletom/nodebook/labels/:book:%20chapitre:annexes -[a02-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-b -[a02-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-b/package.json ->>>>>>> feat(appendix-b): Nouveautés et changements dans Node.js -======= [a02]: appendix-b/index.adoc [a02-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-b [a02-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-b/package.json [a03]: appendix-c/index.adoc [a03-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-c [a03-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-c/package.json ->>>>>>> feat(appendix-c): Utilisation de cet ouvrage grâce au module nodebook +[a04]: appendix-d/index.adoc +[a04-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-d +[a04-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-d/package.json diff --git a/appendix-d/index.adoc b/appendix-d/index.adoc new file mode 100644 index 00000000..b69686d4 --- /dev/null +++ b/appendix-d/index.adoc @@ -0,0 +1,51 @@ +:appendix-number: D +:chapterId: appendix-d +:sectnums: +:nodeCurrentVersion: v12 +:npmCurrentVersion: v6 +:revdate: {docdate} +:sourceDir: ./examples +:imagesdir: {indir} +ifdef::env[] +:imagesdir: . +endif::[] + +[appendix] += Une chaîne de publication basée sur Node.js + +include::../docs/web-header.adoc[] + + +== Processus de publication + +Expliquer le fonctionnement entre l'auteurice, la maison d'édition et les librairies. + +== Une chaîne de publication pur texte + + +Cf. principe publié dans Sciences du Design (https://www.cairn.info/revue-sciences-du-design-2018-2.htm), +en libre accès sur http://antoinentl.gitlab.io/readme.book/ +et dont le code source est sur http://gitlab.com/antoinentl/readme.book. + +=== Écrire : Asciidoc + +Format + +=== Outiller : Node.js + +Pour le convertisseur Asciidoc -> OpenDocument +Pour le convertisseur Asciidoc -> HTML +Pour la publication du module sur le registre npm + +=== Versionner : Git + +Pour garder l'historique + +=== Partager : GitHub + +Pour l'échange de l'historique et l'intégration des corrections extérieures +(à un moment, aussi le lieu d'échange avec une éditrice) + +=== Automatiser : Travis CI + +Pour l'automatisation de la production des formats détachables et le module npm (cf. Annexe C). diff --git a/appendix-d/package-lock.json b/appendix-d/package-lock.json new file mode 100644 index 00000000..07e77ffe --- /dev/null +++ b/appendix-d/package-lock.json @@ -0,0 +1,5 @@ +{ + "name": "nodebook.appendix-d", + "version": "2.0.0", + "lockfileVersion": 1 +} diff --git a/appendix-d/package.json b/appendix-d/package.json new file mode 100644 index 00000000..41164cd9 --- /dev/null +++ b/appendix-d/package.json @@ -0,0 +1,18 @@ +{ + "name": "nodebook.appendix-d", + "private": true, + "version": "2.0.0", + "description": "", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "engines": { + "node": "^12.0.0" + }, + "author": "Thomas Parisot (https://oncletom.io)", + "license": "MIT", + "bugs": { + "url": "https://github.com/oncletom/nodebook/issues" + }, + "dependencies": {} +}