From 1eff672f06f28ca335283b96dae6e938469fcdb7 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Fri, 7 Sep 2018 16:20:45 +0200 Subject: [PATCH 01/55] MAJ CDC --- README.md | 73 +++++++++++++++++- ...1228322073974201_6754233297305337856_n.jpg | Bin 0 -> 60730 bytes ..._340720676473669_8185729820999548928_n.jpg | Bin 0 -> 24111 bytes ...1833802126696967_5201800299966103552_n.jpg | Bin 0 -> 35971 bytes 4 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 public/40676339_1228322073974201_6754233297305337856_n.jpg create mode 100644 public/40684029_340720676473669_8185729820999548928_n.jpg create mode 100644 public/40875936_1833802126696967_5201800299966103552_n.jpg diff --git a/README.md b/README.md index dbeb550..82e0475 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,72 @@ -# cfa-nimes +# Projet WEB CFA Nimes -Projet WEB \ No newline at end of file +## Introduction + +Le but de ce projet est de créer un mini site administrable permettant de visualiser les végétaux visibles sur le lycée. + +## Front + +Le front, partie visible par les visiteurs, se compose de 2 blocs : + +* Header +* Main + +### Header + +Le header contient un logo, un menu ainsi qu'une zone de recherche. + +Le menu contient 2 éléments : + +* Plan +* Végétaux + +Le plan renvoit sur la page plan. + +Végétaux contient un sous menu listant les différents types de végétaux. + +### Main + +La zone main contient le contenu de la page courante. + +Le site contient 3 types de pages : + +* Page d'accueil +* Page listant l'ensemble des végétaux d'une famille +* Plan du lycée + +### Recherche + +Le module de recherche permet de faire une recherche AJAX avec auto complétion. + +Le fait de cliquer sur un résultat de la recherche renvoit sur le plan du lycée. + +Sur le plan des marqueurs sont placés aux endroits ou se trouve le végétal recherché. + +Les détails du végétal sont affichés sur la droite. + +### Plan + +La page plan du lycée affiche une carte du lycée. + +Des zones sont cliquables. Un clic sur une zone permet d'afficher, sur la droite, le détails du végétal choisi, de la même manière que lors d'une recherche. + +## Back + +Le back permet aux utilisateurs enregistrés (liste pré définie) de saisir les informations suivantes : +* Type de végétaux (permettant de peupler le menu "Végétal") +* Végétaux +* Placer des marqueurs sur la carte + +### Type de Végétaux + +L'entité "Type de végétaux" contient simplement un nom. + +### Végétaux + +L'entité "Végétaux" contient : +* Un nom +* Un "type de Végétaux" +* Une photo principale +* Une ou plusieurs photos secondaires (?) +* Une description +* Une position sur la carte diff --git a/public/40676339_1228322073974201_6754233297305337856_n.jpg b/public/40676339_1228322073974201_6754233297305337856_n.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10c6d3ec8653d2a900a5919f21594fe1d625c272 GIT binary patch literal 60730 zcmb@tcU)7;*Dt&idT#*%={+>*ReDY630+hOH8kl>K|n!`^iJrI5V~{$K>=yf2}PuM z5CjAP6|tiDhI5|hJ->VZct7vw-e-FKLQ!F6kdl`+iR=fazJQ~XvjEjAfDE_@umd6hzngn# z&^gWjmPqaWclx??-Z}ux%bb5hziYjIbZplYrT_Eo_#JhI^RoYs#O&c2>P}+NkVF%W zBE6iH?@!_Gs5g<@6EZo}_otp6lgaWY~FKx^wv< z?m;2v`MadNs=JRHiH5G1l$ZX8e^L$r_(RVX2s1KJkylqykx`J57eM*Dx%&x(y1V(G zxB5Sw&im@0Hbu$-fQiIg=Zt%JNW?#7L8HRPS-L*(=1Z^%EA zpHVPS@K8umXi&f?94WjhA}Nw7@+hh)Iw*!I7AdwVzEVs#2O#I#K#k-lR;S zETMcv*-tq~xkdSfii(PhN{UL0%8JU3DvTKPT0YMbgiH61lSwF0#1g@uhpp2dnKfF*^cj^zc*J60-IF;*j157xV^Rjkih zx7f(ogxL((+}ZB1;n;@Rwjq=daR?0J3wa1>giJ#|va_-)vD>ppu@|xTv2SpYafori zIQ%)%Ia)cEIDTH>y`Xo&^TLA*O&5q4zHwgU)aCT##Be_1T;%-8CBS9G<;RuD^_Xj& zo19yc+lD)myOevF``{wvqUJ^Siouc!PKgd7twh z@Nw|z^7-=R@IB?*<7ea7=124A@IT|<7ho6A6Yv)(5Ev5pD99sdDi|(UAvi5~DkLss zCzL4kNN8P{R#;8gOE^b(Q23(=zlep%Es=VW6;T>dHBleYe9=+SZ(`zN4r2Gj9*eyb z=M;yD$B5U9uSqaS=tu-hR7xyBDWPgmKWGVbRuU|!Ea@XzBsn7mmQs;IOO;5?NmEFx zO9x6Bg-LcE}JO(SoY|W$R+1XnU_W{oyjT7`OD$tR^?gc;qr;{ zJ@Us2k_zq$MG6aw42s5zw-vh-KPgEmc`B7EEi1DrTPWXC9#sCVqN)<2(xkGdDx&JD zTCDm~4WeePmZCPMPNA-^ep|g){fCB%Mwmvc#s^IqO+U>#&3Bi@FMD3bUEb0X(sI+P z(Av-z(00`>*WS<()N#|P)Y;S(*7eY>*4@>E>iOz5=pE_H>4)fd=zlZNFo-qiHzYGO zF~k^78?hSM8DWiH8w(kG8`m3uG*LFWY0_^>VQOZYY5Eez3v-9n!al-P;j!=`GkP>%V3w-BR9 zHsp0=9rCNKzHPegs-1*gxZR*Vlf8?5t^GF#Lx(Jf4aZB4v5pf?+)ikxE@vudd*^EB zFISAN0rcJCHTdFL3Av-;Jmnb3sx;$w3>z8o{~2A4AMSszX7cS3|qPAfyRq zGF&1&Df~@@c0^Ic_elH5wkVdUz^KV+$>;~syD`Qw_?zT6-ER)w61rJd)Y(*R> z4iz_eTln_f+uQLb@ihsw34RGviE@cqi6?g)?)2Q{y&HdbE6F6OKAAB&B>Ck%&3k3{ z$?v1@Pd`w6Q25{sUf!KGog(Xg?rNv5gd5yzv4%|LT_^L~qK%TlXZ>tLH&TT{De zdvOO_2c{F$8QuBuvCrd;E~l=!Zg}@#k7iHD6WJ$(Ucug?KK8!!r?gM+KK=77=GmA2 zp#Fma?}4qs>w~M$9iJ}@*$hn&n+=bR7>_(3)f;^_rZv|4LgPjExZ3#R36+V?N#)6o zDdnk-X_e{D8P%DtS@qeTxyy4;i8{oAdBgdU1=zyGqUGY;lHJnsOP7}$%O1<`UirWJ zv=Xs$x*ESmv4&Y^Ue9~Y^Sbgc=wFXER5tqF7`~a@L~gEbxo^FH8~XOw_T3$ZoxENC z-P(5w?|S!)_h$F6>~FshdVhM5e8_TGd?azy{z3P{_neuXt^Eo3^XEUXi7W}02>gpn z3_ZQv!u`Vp&H;}4}AH*umS$J9vKG!kSUVTEAHR28eB*0^QCza`XSYcS6p2480K&h7J#q7Eq9rQwM-hFGYpFSpv};l3?Cn zfBt+H0|2TV0QjB$=g(=ypFh7zx*%Hxfd245tAGJOO-eM>G_C*51+ixU0Ko@cGd2$mrOMapL^K;?m3IS1WHex882=?7rLE|8)HM zwU^XFz z1Zs$WW<|>Yjj$r(BReW&j+R42>5b^8bJ6~m?Ejx&iT_8E{l9|!E7uA@PX;1&9vKUu z1AJyk%n|wqY0r%xb&aUP1jfw!fQE=WRq9`GQyie}B;_*UwD#$f!V2K`E*EayrkJ>^ zG{CrKq^g~hoPppxAcmSk(SUcOtd69mL^)Ts>WdJjKD4QWrdjNM#VwWIfV9fSXq|m8 zdy&ls!#BFt68QI}Xh}mEuWO&QKiD`sHM~DaPWg%PVUT`%X%=zEI$4if-k+g^hpCTF z(OYCQH@*X_h)LmAy*W$4^#|Dc?tMD=Xnm}u%H!CI-Pz+I*g-lpEm!r(ygniOam1z~ z#-GkN>N;MEw@TTmRG*qBdv^X_Suk7Pr&_lZotX{sHm4il+*I8PJ4kUY|<=7Q-_5CPiAA|RZ`=dNaa6!sKB~wgi?H&>* za%^#dj;qv0y?@FHGh1rK-XODtW8qs+;eh@SL~gTZDlq$14%E%BN|F7gy!m9Sp9Y?}Fo zHU-snm63SYqEeG)*Gnh8yQ zytTQn*hjeZex?uu$jWQw-`kiwxuY}^bQKzYhU17Pg6aPELpXzrxub@V2mHZ5_(qCO zPxK`6V=}Ykf7KG%#i)2!F`Y+n=R7F7Y5e}x^l^3N0_BT^>WKsEp#!K3N>!9!X)NWP z^9iaKBXuzcOajHWHrK`a9qZ%+p3v;aQh1m|*Sf4J*Z&A2%g%f;?CD}4r)_#$g%dyR z@PN|KaX!}4IhW1eB${C;v>u`+wP;0dyZpf=w8^cWUU#T6Z4;vlX)i3t0{A$cNUjrQ5!TuSn!rT7C&Qx8V8Y-$3qAd` zCkh8%i>RG(rqP-bvjEuH2D9AbEVcH{iPm?;^Z9jq5hr^lO4cB3ilG85kY=aMOqaT) z<{RPACJjmjzuqWVsT(A}Qp{kIxd&&$i^bg!7xmm0NgT$;TP%|92_ID4rNUzSmZ#Cz>(SwTW# zu=zLOQSb;;2dM+X!AZT4^g^PX1edL$uN(81dcjaQM+Wo#dw5gG!fPijNsot0jKi+o zdkCCK%9r|wv?s%kj&0LW6(!6Bm3lqh1s>Yw%(R7Hh_10jR54pN0%WGkTyPvh;Si== z4%DnuC=JaOiui84wYL~9MCNieJ;*ATxG2o-Yp4{G(m^L0hI}QJnf7JcoT;E+bzQBI zty_jA16@G)5crGeimhNFZeZompO{`>YQcTwb}rGXVbSB>ee67EvWM9vhL-vnLlfRQ zK;AUY*ym)ygndjU7my0gl53bTm}Gxk?i~|&q$RtvVcXjT=SChcb#a7F z+FfDZFI*@mnHvFLC&wdHf|{f#*?YX{_zOHzGW1I$ulg*<c%+MW%}kxU_M&mLsI zZQ)Q|#iAjZR)wu;!}f9FCm%XiL4LyLcr56L1;99=j06neB|$)?Sj!jSNCQO)7-vK; zgu2OuM$w4%ceghSTmu(~p0XjO#Aysj)-5oT(lMAPC^rS!VQ0+6`` zStEMI^AB@Xdmy}Dmyj&FsE%QwD3t>od-9h;`P{Sha%5%Y-%7G~#&*Bx@{vkL8SH`OMK5|Ny8cW5wea`8oWk8}wm z#Xv@18z}xwErWc;_z8Q2x|8u{Z_J`1n>sZi+gT&?m_=smM+jx`f-M}19jr3%Bj4D< z_VUo~2z5twQ8zp-VYr_BeoCh0N)UfUH{N3HFe$2|wyTx9xphg%(&XCjx|K;r^@d`u zIj(BIhAskrFWKK*@#0d*3&aO{m1c6jMHShdg@-pp)YsAo-?`fw{VOpJxq`>v*!oXu zgp$c)2dFyyL}zuRQqppY(2lGQU0ry>f&GrkFK7ql9W)y11EQhDr{hKIekB`xEBZ^B zeyWcs|K8qYB3^@*DDig4s#4kp;~FrCZ)BA3s)GDN`Y^xtAs}35$xLy>nh;bxmoan! zm5}+ZvJ7LO%W!D1QwGCODnd{trbYs4zHp5>?4J5?^{!C1T9pzI3>y}_jHH182lHso zx$O74bSoM2p%yb-3*|gJ`RMoN)Pup6047I9jZByMkU;SPaj;X$ zilgqF@8oV~Eon_2MRmb5OpsfU4GB8tyUIdMl=2AL2+1qlhORNl76izO&cF>NjZBQJ z?JR@ma#U}%0Pqaso3w@QqcH`d3<=ccC_FWlZ-J=k1-!*5N)(peAW=>m1?iWI+NlbkvO1r{tOAtpH9A9WdRW`%WOxGG0*^k9 zF^wq>qu86OkGZ%$POP+u+}Y9Y=)HDV$@{aB`Iw1wI=f*i{spf@WxTY3rk*4mB7bcJ zhka|MIHtGTqFxt`p8_l%E4eKs+e?}R`ATo%SoxqzN-t6u2L!t9_g2{h0t3!IW;9Vr zM%8gqX8S11(qN4nDo-@n^Ngs6JRLo3=cai+`W3yVGo=QN|_q)$#y zIiqaJl^wl$8UCt-(;Z3U$4!ST@KT3#uH{ZMz}t@5a}xb7P^NV)K3rahnU1Il<6X?M z;=WUnEj4r4EHB>8S+W#+P!vx&U_aBL)NBoFcw0n{uuu$VF#N5}Gy;dXgN^MM4Kv5Ma^<6CqLAuL$|eH!F(- z4QiP>L;+);oywlBw$5c)FT?e3A-+DH<3(@6!*$lx&urHmo6^XHGO&T@-lZLb2auv9 zxpP;Cr8%kg!jMCiihmNlvV}+nR=tC@0P|wa=R?!b_!eEJDKXzma#-^Y0B%~H&o!k; z{)IqMu75*2C)8@y5?sK-?6Zm_SNgfSMJCz==YBWMt05xwJ^iu#{fv1ZS&QXv9cSy1v z$;|d$xOK%yGeRB~l+#6U@8EX^%p>q5W2A+mNe++m12)Km*88(YVMTcjQmg z95J49Zx5M6Rk7JUaW(EpuysdXgYP$YNBQDOVfy3;y09NfjKvwtk2w5Pc4k>}uKD4Z zMe2KKGG8w5RQY*Z$6bTUdYCz=nLRZ4y(ZW2I3ZzxKQ%@q@5eL}GlLye_&q$>c01@- zbvyZubzkW@hH5PeD|2>%J=2WJJPe8zBT){W#1iBUo<+NPYMwPeyQ?$tA_^D2!ze$*K0Xk+wcXl?#5(tEN~> zWwBXI89kdtMk>p@W+HfXwD2l}(v{B0IUIh3MIqazrhfKVkAGARw1Z zkP68$D|p;Anga6#dUn-`=5;>Ag&K?;jKLJSzPAL&w{VPG=c>q?VI05$?HldCLe0|Q zves+vjR3M`7TKapKZ0H+1Sma01Cxk_1oRspuyhy~;ZVCn!pb*8@G_B$8aYEcYj{m? ze6cJ1nPB|XHK0uHTHl^8xt^qMv26wPUH2hu&BHetXS;=mVWRpE;akE$400g`*-t=a zFszcs86(;V5Ys@+*OY_vQfzc7AU5U{!q@HkG-RstjtY>GI!xrhU?0bA)PBV#yFNN>CoVKK%y>=t5WdEVt}S zMO|&Mj;>*%!b|#bOrBlc?y}d4Oj~Ra$=e`!*G`!z9P3dwe0c2kKv?*9#Z*}JsD7`m zJ#*nva^17!NN~UyTdCzIu_RKC-8@m-j5yKHWtoPM4WH-=^ZxicpQULRP z&UMYV_U@f)xhgr08H`b4En;)iw*GIw5+*s+dJ&*|F2C14Uzy(vHDq+x$@S7|OYeP_ zia@nMTM}LRI{HV0{B%6JWSTRxt&W32C@k0)J|2K<6P7Wqh&AXUPOP~gppdpSdPGvZ zO-$?K(~p{bCqqbjBc0og^0{-E);IT@eY8(N?#W7bV{Fw4ROOM(gNhk)v3kRPj_-RK z)9J)Z_`i8H9BvR(LXi^U-Ea%useH`Ii?J&>zsN7A6IZ3Lx$KK1dgN-^?)1iH3m@%d zaddTLX!U+zyWQ${!6;0|R_p%TaEJqi_vYz4U9)BTu(OXpuJshjgql1RFbUq)`6ja2 z8syU`a205Ivnf$ITFb<|6l*fm8cQQbad3sJg%X9+s&5trD!Pe3 zBF=X;7(3FFR248WCe)Ff_SOuU`|Pn{sL;uaH7zL}0$?8>?8ht-Ij37KvXiO~lF`TCF*G z=p5jMtu$qq4_;Z-ck1L)NQT_@$PbiQofm2gymaZX)A$ARnwpkxX5No`Q&77TGG!bZ z4u3a&?Eveo4+)-$N!@vz{=t-L%Vky8@|8&DgLmcJ#g4E(_5hCv;mepsx6@XaRJU43 z*~8;fogPKI>4rOkLa4Z09u5D`RL5D;O_7uv>Av0G1kuIBsa^jd%h2Nl+Zv-laTObl z+*P*wa*~wYeIjg<sC89U zUIx=yL2^)f%+o)B*9Ga6D-)ySjP0+u*XRweXodI{;(QB}Qat#bU2I$b0FAz$p~~K< zS=SiS2Hj2ur3B=F+u2nmze9$zoSd}0Lu?jgtRXhbF!H(ws*nRjg4OT^P&~48J|16A z9T5{zol_53+al?>n0W5Lx@JNwFBHuT8GNj=S(T{@2C55XcyL8ITRg0a7Fqiy7ESE& z8y@z!7XQ=dI!RtGx=%v1d>bdHqlX_?Skr62ThDybA?R@{ciB z=LNqICPZ8Kj+gfvd-b1%e-r%B)2Y4c8A4SCRvSGX?EM48s9n6bYh~zhu`=YIR?Th} z)HZAFpn5j!O2!n2Ti~h%!iv#p#WK6^Ri;BmX-6t!RVW*iawH){O}WXFfm=h}(=Ef# z&ZeW5&>rCUjQ2%maYCB!%Jg5(FAU!K2EDayHeb0?^9R7_jN|wW=&KI-5A7AYc^P0k z+!l;GEf`$|?Hd)~c)OLt z{Sqb+{CnQ=IDyLvL|MR-^euTa)odWhGJ2qaE|u?CFfXO`3%LU>H~jLQVIID|y=tlq z(|aOnqb-~@3zz-5RXufc3g%4gzBTv&pq-xtgB|Txz|5~m12hb9}?7$(9(Jx;L zA#fmyOqy2LoL|enzjFUA=RtI>O6IquC}O?w>1IfZ2D{ps-R!IH_4XYr*%VzVOq-lH zrdz{OA@f?Sn4z{$vY8RKmy=)3SZ}3IKaOC1GJEg3o%)$w30BF1L8#DbO0Ysss>fTL z-R9+E=Vwb5VU)G0y0CZ?sw}%5rk5icz0@^gmz9YD10=`taj`oG~ zzgl{J<}~-a2>pB9HS{7?j2`ER2JOC1oAl=de&6c{6St4f)bVaS{V6|*NjC<2NF}#s zmBxZ%=G=;xh)`Yi)8w9<`NR3j@cPV^=ieeg#c4Uto9Zk9P>W$Xt!bSSJM`h!7@CUj zOPOCFV{K?a(1>ozfS&q0zqplED~1Q|v@`&P^8@7zUg7i4)#rBu$Hp&Y2DdoQdi@`DnDKSsx1|w;30hsYov|NvF8IEw*iv4f ziqOPU-sb7w(^1n~*mr_+(pzb&@<-B&NdO9`DhEL^xUEe=PuGI&g?f_LtE1jnyA<>6vh(!Z z&8`&b(v0Cj1io9E|C)E3X4-dlhf`$r8-Ml}TnknzG%R2D%|~0%wATH`E06#3mITdu zb>}`Sw5G2ewRo=f$c+9+?Iq#S(b2poezjdaSx=J9RM(z`>cF!Pe^zyVkcH?{52$T+ zk1mM2Pkuics_jHJ5>_5c>sr^T?m)v)yOZ!|fl(O0n?tCwA`h zA9l8-%RX_Qg_mO)D>tZoHfK;i5xVw%HH^UHO9}BVU#m-u!}*^$&c-S_qs#TO#21oH ztSj+mq=+T4A71{p-2>rtilsMS75w`Ag}3X>j`qoq7SoztzdOVyYFDi6ho2VB#_q6R zcF0ec9R6yWd9g`S6d~gT$?W=k!xYCmhc5bz!ILLduC9kb$qDR}Q*@RJp%%CYkMCFw zhgxkaU7^7QL7wJ(lr&a_pvuzWE_T#j3^F=Ykgjq{REli@ew8%iYC?XuqvA>1R*((o zGO4@-69MhFCcjC-$eSemAaC&sLHeaIN#OZ4Sg)1iof7M30zqN3_0ftYu~4ctWs8$t zvNXT?)oFCKoNunl!c_kzu1zx9<*dVT@LkB=^uZ_h9wQ`+URCg_*CVY$To|2r^B*un zv`m!=-rEmNx7fh_#f-&v52RacuZ?}NA=XHFeo}}5)hW5_F0=^qlKIeED~b_wTthX=T#G(VP{SLH@Q>Gb6k_gw2PMz zIx!vO$5a(3- zufV=pPV(i>T(eM0i^+ZIdj?maYRMov?@L<@A1#rH&6;9#`9OiT9`sxC=F~*@rPg14L*3KIuxUSW7^M29;?Vm=UyaXxT9J;e{jgulqaR^Y zVb)PkhhP4dT{12Eou*e4wxWbEf48n0YUdcCl;>QX8+SW6gni~$TO7mHJPwyUNGD&4 z9_KrWW%b&<;4906+p$%R7bT5(TP(kp%bIlN-)PjKOd&1w6u~*Par2feSl})b$?TIJ zSUC)<{eHkCdp&J1gB`se(X5Wo@|mIG)7ob}84CK@&hPPwb&TqTEO$p@oq39}u6kYR zC34ZE@h=G5rBFZnB1rtf_qQO&rMt!1SJRPH_GK->Maz3Pnh-l-IkGBYRM_r-I^#fY zr|+v=w7|Y!%Gq2`_I;%vSG1t%;m30tj9`RDp^wLQFIwsKRf(RXT!MTxJ~3;*{iX} zbD*igPkU3gv0e*25|KaY?P`RGcQ1*=xN{)1oz$nUVfMpioA)wCz@MIAp1H9<=~kE& zTgqrjxune1b;mN}6x-Z+O|a;@@cmfdg?!aAg}#&Eqq9Q;>F(KhNNj8!kehAyX#uc|q{NH2_%?B;$`eDiq9by*lQWf0Z|#^w zeigf?@=ZMF{tIwGadZ69_0O;ezeZo2i2pVEy$@=zt`A-_DZb798L{JBePG;au*0BO z{L}UUnwE2w-ieAzS+0~U%Y*E_P2YCT?U)<$>Qx0Uom|wCpPB5Z)E-|eE3r`>yLMev zmE&D-imkQ&KAnzejX$df9WvJ)(_(v&;5a6=usHb>GrT`R8?#fGiL4|x53ibGvI8U_ z)DJ0hX!9Yc0{Zif0FqCo{$z%Ug#c^F7Sdi~yg7nMJX4~FQ{#t8r-2eA3LmgS`}#TX zHgv3Fm!%Ms0885>AXqSg5_BvDISVpAO_EE{h%3SAH%pmtdhccxJFps#Idc9e!CKM;)_!L7L1@8WiRN7pBA~h zyZogd8tnfE2yc#Mf>8I0`~iG(o9?ohDe?*H`#uqzrf`3s4e2yhDISa7!LmgtC=orP zkFI>+Xtegt?TNOoOPCEsdb3X;op|OK^AQf$3{XubwU#(a&}fixsFUWN!IGs&k=N#k z&FQj=iU$7DtK5DcZ-Y_EsD{|z6zW&lFE`Te+--irs27#{A|%0gegFu`7)&aKBoJ0_V(6l?d9Z+$~c zG3=r&Q?TU&a{SpX$&_q+tmO84)z2(%v6mDT4z1PRE=D_%A2)bQa3)xfDzzk2zm*EF zj;JO-Arb^^qY0G5WL@d3rGKTv7h0FX{phI!&C1VcwB2k~y-0`7;|QOxk}eo8H13n` zo!c{0n#wMvCpT~uNkJOe&`Cn&qR>KMIUOGw_qk}PJ`eI-V3>n0`@)prly#vbnd*%g zX@R|p|yk|_miEFPK5-=-x^$)QO; zrUNsVG079KW&MOrk=L57WgF}sWm*~0Y|IxZ3O1XD+e7dUdq^(pkoilyh_@MzGaUJ5 zgR6sgZ?o()(m55~>*o9exCO&sey#uIA9qLD-ohcyUd>VqHsZ@uroV8btL>HH0jo;n z?Iy{6rA!J~h38>ch!oeOCOLcgw##e_*d)^ zaxYky1(nfgfuSy^4#t?kR6e$L(@6Do~L?77Y z*qg67aY_1FdQ5I}pnhaNUgsnoy%7m{BX;}|we945TV>8ugQtoYz%G27MKg^?J+7AM zvl}j$d`g4(BlPO0g-{E|dz?xK!D)*Otea};!?50;i?m0iT6q%EaU|E8VJkL5Wpml%GO6ak8{8Ca8}( zmspRgyrgfcNch6l@FT1UYMn%Xw=`lY(KNOABXpV9z-|Or)yAD|BCnDZ)caf_c$s@5 zkFMbM(%`sOaOTxH@`!RiEt86!$7!OCbCtDgpFi%$aEC`I>@BfnKLr|YKVa~*C~rOT z5#Q3{>rD00uC5FA5(_r#!RL)1^FO0w+3#Jn-dK83Z8zg8OXZBdJzjUC`bSQKX5Iu+ z)y_K@dv}uR_VhzC&&{omHNWPZMuKkg5V=emIoPN8l|rX@to|jKvT+hV z+=wUJR#j2XPRqhEkM#c~n>y;J)0(sq`u;`MJ%-m?hHk&F`UAixnL6aE5^Q)Myl|V* z@}=sw$+#z0LS*q7+g-u(e4c?%PmW&177M$-&K+@45ZK?W@VomXv3LQ@!q@l8ciytB z+1kGBP3+M_Q8HaOaQVV^r%gj(VR3E-M}EwKzk&!&xXRgK9#%WtwYA+4Jr|+g;sGNI zuWAVPl_Z=ND{{as$nNiXJB)atH-}~;IuK*7~1GRHsrbxoofu*%)WT+=A1vp zu*zQawCowX45%E=eZ8pWOP$^^bpI`XOp*N6%AL_^&ufDFL zl)E;+q@3sR>N-NAYC|wq&a=di`G}Y!N$a!z}UR)I*vSB-Kz$0;Yx>4|qVwc?^ zxZ1XphE7UR_}1EHA9%z#Z}8P$9}Wk$*q z+JPL>et@M9FbwIcETGXPph!V$IqlX0m3dhSNs#t}a*9ff1W1B#e!_*A1>0DX28x-P z5g;maUYA4(=02Y{0wAs^lG&Sdv<%=b_P@1lM}h@lhh~`w1b?tD!)6L1+HcPksWapQ ztiH~s%xEZY65;#7Ee`$0L*~mJB4ljej14fZ2Bfb_}gt)~k zV)4E%uwdv9N%Wan#QKkyR=*1*tqz7p;rn0jpQv+<|G1c}{%db=HuU&QQw_RC=N=}< zQQV^arXf$mHU;5S*;6Lnqp2{!`Zfc+b05d5Hbv_Yp*P_Uk}mkd9xnaHCQo=js;Pa| znQTZIlEqoo%yDl1f(gYiRvG&e#d_=@AkBU8t@eX^G0rR`W{0Xb0CChB6Io=HOWSfBJbG{vs z-{QUlMWrx}Jn}b>U9pnUd1AHP5}NbL%>GyV+2O?tr|mbzc(&n^uZOj2FL#_B@{Q|F z+L5B0&Gt<4a&AJYjy;cGc| z%~izI%CZ(l6rQub$OM1U1kd;4p1cDD)#z%|9%FM*5Xue>w*M%xq9yTFaME_v*W7N6 zR*rOI)#XAka#>;WRiV{-cys|e=Rhhwr!tpC;z_TNT|B9JCATAKW8X<)Wp2-;)h*-^ zr0b+!(@1Qk*+u2rwbWbLRaRGC)!#~TkINt6;_{biAS z-cf%5VGHjSYlxZ-{@StxOWIDl*Jwy7vIVz7J*FHvZm{50rII)L!Q@AcwsK!zmj%`V`IJ4`sVH5?!gj#x|yJ zZJ7etes3SzJBtZ}KE?)P(XbHh;19zhE0oy^+w(%f{bcFziF{aGogYDPU;}CSdx-P< zsLLX>m4{8O(BG3v)3-3$@oZ114>V`0nT@R%#W4m=*y2jxYIw8km{ygd2kitnF2;2b zr*K1u$9$xzQtVnplWuhmS5bBNa%G8G^Hy-b&DtkN-1Nxoc-(6ROW??o!hQXHr~TUo zoo7LsVND@7>woJ#i`w=6Mnx-Cm&Y2q_%22Kn*4n2+%>8&1E*`X1U$+NBU|}$kd<3Y3;k0gqOAfmh>Zxr~0!yFI}r& z3NCP-LwGpcSpvXU^+5m|l7|++S7HE??+2i0iE}S*J`0{Rr4~>q#yErD{O$P>q=+SC zl1i}z=saYT6fE-hMN#=rID_us`J6#}9x3(Dl|h;TSfTOl2(J_(-9wlWWH{IdHw9tb zoHO>B0tHoOVJL#pf0N>-0FA8k2?s&6!2-@us1IE#i9t$;jS<;-W2_h`6lnL#!hko4 zM8xcczhhNu`3UbFe6yPwjohwO1hYZb`}P((5)2Iy0ky$KfUc1eri@H!y&dF|?wl$_ zeK9K}B-H-vJbYFxMQSR7_zI(6jW*e+?A~h%=QaFw1m8VM&(*DlbllPWYbtxr3NrQ0 z!A0Ol?1gx#H9|7M;(G0lW$$jef5&6~n>U#Z5=`sEBXm=>ua6U&m8|_(7 z#a^xo)E78o-|T#bl6DdsoZU_@yY$UuogKdabLX}+$8y5Gv0mDGQc$A@0f_Y#Ia%mx zwDJ>|*NsJ4ZCg~RKkm>jZ+kS1T)M#DcL;aj6uOhG%Q&o1tT;=| zJt-&Wg(|+z#zv@>Q_b^y#d8e{Gx`9?1!NFaj0-8;$dQ6)Cz}kfhHyQa;sAnYtuChW*JgBPuW@W+aBzSPC@4anXNE1T4aL;0Apj6?Qz zDaT$}&iqcs2w?L<4FZzktZO*F@=23&>`nZrvXD`?fzmzkOboe|c{GdmXIuGum zHFQ&_D`MdbIK@Tn?0B~kurh*JgU&Bq(l8JIuMVX0C3QMS7Ret-;PB;c|4nlK3p0c1 zCSphne%yb#hI98IQPlwfa?X7L5kW-iLJ&m6xp_#O?+Un*Ry;Y5U<};Z;C$S2V4x%{ zcwPrrnL$TtQI6De%yyasXAO(v^%2jWa31(+JY1L5%oH3WEZAW4x-Ino@hZc>IjW?} zurY?3Xi?l$DBP)`fgu{qf7v&12j3{{K{b~cIQCCrSVzgSPZ~|zXUEK9?0e;e=q2hC zg~oJG8h9-%Z2iOX+&NTyHBB(3mF<9YKj@w0E&F&Cj58dNg#G~*k9cht+7*t-V=%xq ziE4e=1I5)lR#Rkxg=XU8+OB$#7dZazLOo4ON4qAUJze(o&7jak>T2N$i14IKyauLa zTTE|R@jWJOgSBuMNQ^qv#T*+?mxgw#{GPMFTy4BgIeW1#(`dlKqAukfG{v=WS%QXl18pgclRZKiIw%5?7Jdf6XB2LG*hAi0sD>ne{Z;) ztM`0Bo-Z#U*5EmqnJxthQ`7&g-AW8734+3q|Chf^_y?%lz;w@b4l;>3chsbwAVpdK z?XkhxgzMp(>UldW7XGNLhBL8&f z3iFBy=jk)m#w#owdn-L9#;Ed4V@=1+%MvrhCXwiR7%=5TlP0AqHes41RQvT1Ijlx| z+Z{of+VcO9_2%(V{$Kd;J$ACiD6$iVBFoqcGn9RuL5oyE%&3$^D2!xjvhT(=nX#u* z6s=lhDZ5It6j>{kC0TpU^!fgN&+~dcf0P=9c`xT&*LALQ?l+r9%gWW`W<_<4gVf`X zTVUEHO65we5~j?a^nOj~ouZ%Ecds6gf55GR3oiQ75jH5aI&lLGwXT{Dk>gW;5vU6e z{oL#RbbLRF&Nt$NoByT0>x1LPT>FE?6xD0k{ew!E`icjmHlElNQjzEum5sx#&0%NK zRo2#I+ipOpT+4kr`E=U$&X|gE2jRJ z_x7+_d)$Ei|JzsA_OS99Yxn+tze;<0wjp-iG&_*r+|& zz&cl8P2|6F`9`RROFu*Gz-9phz6jN4Botk09=dR-nC%VRD>cMEr^qUt8|}fnms$eK zWUF>%0j*7`wlwlF8+T6%e~&kzwr7lrXsePRlKT+ig%VgE8@D}O5PmX{T;`C4j>Q1H z=`WtS2|eGjh%b7^UtsrtVaSG49qj8QSUEU?tgORY+47Q1PgLG@13EA36Yvh<&0$L6 ztHIl4fswpaTRU-xe*Wm8Mk(KP>p}sPAnxI>vLIv?HWR- zstWKw3-wBVMUgh&JE>x)wWhkaW-4*5oXtkfs4X(aa?JjN7UYBIIlA|P3!5r#vQEa@ z*e47rq(-+$5B)`UAG_N;_;h^{FY<-x9hTg|ST!1Nk5`A-L=-al$jl`BrmqI-H~K`bVi zqZ_aAxkKf@G%D4T%G0E-#R*LP<)QnlabKNXG{f6y53*irPWB|wc-hj8r{j;3Ch{KS z18js{urZ|f0L8bp9;TReo1^({xZ%t3=H6=>E&P5keal~D^~>AVoGW8hQqEg9UDQ4; zo+TWqmheI)S0p+oTjiDw5?-8nfcQafsmiciIJwqN>s6PZipTy#LO=6Wu&8s{h7#Pm z7N648d5yAAF>VQ`Xa|2$G|dqsVGGk~vpe_I{3Kl)b9^`4MD1%=)BYmwo$*`9BseVp zH_W-2>9gs)qwH9I)6rJmENyR)nJK+ztiIGu^s39EbF^blO#g@F7yQns;{9`q@}|L` z`1m`eu1ZzB&R6ADU^FI;-!X9t{ELJ;m#t4Z?wm_}kRsBKNvJG(G{ng>w{9+ud0qHj4))r|}{^M4BoEmV;sgc~FENFRN$O>HZ~Lz>#2OV-$!= zY2a|;yySneHSi_5E}~ZMNX^buhgvujP2NU!53<~N+f%=hyQ=m@ap@&3Ag`_}7kL$> zX$l%!ml=>sVoYTY*Ff1+?YY@>at=SWdQV~fYm2=e+mICH6ZJk`b17Br2U6a&F%sZ;D=R#u-+LTHI+Kzdfc%X7-rX*R0 z;`)eMK6CZrrl`c3#vZnDC7m}%Bm6T8{oooib$xm^5Gig>NO5Kbm^_*m|;Q zeFmXX<2tYPZMcL^|5)~+C^L0=i#Bqfj$2QD`HNIWw!tgqkKW^gw=i@HQ-xl3vAq^g zK@Cb#Z($zhZqux!FM9g9yMOsYUnhMGC|WGX@gWDlsLy2%Jg4Cgr_M~Tm8sg^;AP=QQzH@{s&elcm_Xz8;Izej1>i7J4!DzwLH| zo>75=@$E`REV5KyoU=u4wXARv7j}7sL9IDL=x z_Og(HGo<&llug#a{fKiJLoNE68d3GSyUof2`&J6c#FNVwIde0iCcLjKGMrhL_T(U!;z4ZbS3so39?=E>I-3>XHynx?q|vA8#AAk z5sovdadWzceB5qGLK-@C+V#7OZiQmiWw)|$#-4iJ9IAGl~>x zBF95z!>vvwHF=rT*LcAYJ>zGFo(z<&C~exf_erMnYY#=5%2#!|r9;h~=$RtC>?br- z#^E%G`A4QSaSw26?n1N4ZQzu~Dsz{>v1RkjRtDnXPSXZn%z{o_fP0-#R1ixMC8gbI zEVSjsd2%q%Ir#_QEwLl{KEs6Xhq^>-1KrI#aSI&Yg;SNQL39-t0FdI z%o@)L^agR{{^d%&#l3&Ul{%CBJfT0s!`TWua~+~^EQQa_T)c$N!BEIb;RnnIXq?Ah zf}YR=3AX!TLO0dEp3WXF86$7wREsn)uq-OY?UVN;@kwlAE#l7z(oogwLOm!L$h$k7 zALfjLqs0Uv7u|>{hJ9zjNcgb;1OC6iTrbl3C5+kG_p6F?9dPcVBFB^Tn%j0er(qo* z)R)r@r?BkJawzSsQI$NFR9wJ)!Ed%>pQtvKVkZ(V{_q{Q=$x=$I6`k6W z(|Wux;}6lQPyQMEW5m(c+8jD6dYn;y>~n*EkteuJdnflx#S+}EDMD~wm}T2e%kcr7 z!s;!fIeuK%AZQucy{BO-iU~--^YX#Kf{F0 z1Gjkv1PF#w_ly6&QDr$)Kf3-^(xtYGvF9;)vF#K<^ICT^phjI|zrdsS=a?dWE` zF?tzY99=T*u;XWzXg3bHM4)|Mwiahmuk%`BXKWBV+ELgfWFm z(I}e#3=*!SOx7l$7MyiV{g7~Udml8unp@USFiTOU#VI}iFw=j8;2%8tAJ_-F!vaz) zSV)1}XMUc{OC# zk+l6&@=ou|Y7J>V!dvzbiDxahU-*IFT3%{d5FPNl>^~F;%Uj!Mb9pi^RO=)6T*b5m zdsT(8OBdT^zKTwQh1w>c5f0yvvYC!}UMh==5NN6ZJD5!nF8|3wOePCUcClE{KgObr z2EqdjUymYF6dqC6QWYvA|2XcC`^1B11NBdZw?rR~J>IBR?fSZ%m!bMP%PDerca&o} zBj`MTS?ol~E#rdAa5X5bI?=|k3P-%z(%z%E->GUG_sfg z6ALt}7QQsR1s0D6X@a%S+b|%oFj?DV^KZZY1G+n+uiXf1cJABt7m;-eSlg-Qhm>3z z`}VD}`3;A@n9q^KalLceIJb04U=l-G^(vaYWRAF6U3>L9?T)4VK%jkwadVbl%CCZ# z;c9=8bKztX+g(PhPHV!B=DHZUBwtf>p4m-3TAev!L3Q#9P#k75p+ojD6n*YiCe$?2 zxx1|a%G5rZNTcFi@8TY&TK=?pUhPWSu%2`elCNyi+`{4^dQ@lYf5Hp`{~N9on#d9j zJXkCq1=1f63#9Laa7pDpUe^{X;Z@Z`1Bz>VsWVMy_s6MQD^?~nRFv+fVs0eH0FF%&aSm`OE>Dfk zbHuiJz*+c=k9)Ck_h*%>+pa~%^!}5jvb=eskJZtx@vNlP%W_KM>R^hdLfwNVvwKQCoA4_TBt`*GrbDI=6YJTB7K3GSpj?^=dYn?oNHAv^SF~uuhW{-tqIY~#uD(n3(PWS zdk|~kdj6k;l0h(MW2r!Vur$(_)3V`qus${T&gY?cxJ=}4aa})G+l7(R;j(p|&T%(l zaCt&iRS(T*W7tu7R3dQr;i5;Q=IoA+POXaHH+yYz>`!d&lsm0!FmApzDe4hGE)c0TaG8Yk=IJFy4UZ%$%}9etC2s_0wV)6Bz1iz_}%o_M}u*N5`H zNp9r#%%cS%D7-j3TUJ$dV{4o6qwil_!f2z1Dl&vfnglDd4+#es7WvvuRp6U*y# z-a;qjm8~d6>s{{7^kqs+g z)|EBd&=p#S$tC>&D4`7e!d0aQsBnOviCx|zB zE7qxZH~F{ful!~h&*SaHJ~aXN%Mg+pN`T(e^H1|b80g@CGCpLXCe}iG{=aevO7-UT zPxX7(2%2TiqpM@XHwAm_a;u(O&9y8i+`6uC|GWhC(QV)IcCXYs6SKJ4w!YOv{QB`T z0Yw@4?~f`Q_2rI#_H8{n)bWSdi$=I4vA>Q=8uvl^&4}}KvmXFMeRmo~lx7Gw8-8c0C(jr~Zb9-)wm=I3){h(L zz@&2&r(*|ckQ_2t@>{!#A)OPf@|O!BJ!t_lds$M-Qp}w(qZC=14uNLy9WOGGl4`GT z8NvvkwrWmsl!*8FlJZ{;bZ#H&3AuK}8k)gbL8i}}xY?SD9C_=uWz&T~Ss&E98=h6R znGb8v8F;kfx7@YQN#$qCn29IFI61zr>!f%QiB$!KpieA+jbmsK{OU`eKXSaPjns2PUbRq>-OI_cjuL15(IyMmh z96mn*^qh5Xm2Bsk=kKgJNMKKUoX>phmR@C@lOLWhx4sfMdh;Z{p1mVlDysf~E$wGza~3o8M^9S5 z=-%>TYD*uhd99?>DyMW?Rt_2F^K_}2^NRG-FFn6OyP_i3*Zl4Qot9L3IuYxvP1bRd zU&wev`vSwl3KX@q{B8z-EH^btFpDW$vAK{6q#*;c06LtUiFAmTn`k zKQr6$wA!umeq)}h)ds)*IDSjVUa9VMiwm4*ejtEFLm|~sL<-vVSY7ns57wuuU^=3x z`8PwGL|)xtFhtld^Kvnnbe`(!&vh}L@n?6Z50~(YN9uU~c%|<})3E>rGF>5yBDI@Z z=BHQJ<~3^*=~hR(QE%J2bt6pfOdDk3n3kH6@usQ!zHUshk3j{9j#Z9K(`k``y%(Np{b z9a3LD!0`HZLT{=2H}UMrhhmfW5ylSR)J~h(Qxl?xo8*iwjSdtf#grBWb~idKeDA++ zYhQMt@IpG(4NO(VW;r2cz0X(PrAB+-GeZ~povkk^zMmi>e;a^Q;(i4+H=EOPQsi0! zUJ$0jz;Z1(lg$xTY=&nx8u^!$^$KV#{cLoY{@^# zmD#Q?4%H zCG&OC+?OA!Yh1Vj#3VgwBJWGZ%)t$8sPK{va#U3!)x!4Hr0tjIxN+Ks%VmQ&tKK;} zS7=RSr}^59iAmp`=!Sh4&vN;VAm?Q>A;UIoNI5sml1X$9)(^o(H7se`0`Na!8&p)I z{}m3DF-Q}Oeg4aa|KU&&m4Vmlus4x#76pBffo%*2YWK z4%$+ExB5FdowF*Bbc`0+p=W+c%oe{j;5&=1d%Nw(p>&oMY4c%+NI$_`FDH%&xzvh_ zNSue0CSIJC1StdNRS1$1f(0*w3#8zQ%OIuaMLRsBv!gw;KprEQE2~nRIHmr{6W~W8 zSUWVTqce#Amk)u)<mie;PCfRZE0hh!A@(IM35SF`p$fyV%Q{^s(MuY@^v+Db6)` zG{ZY-Vn)y4i@{R6{R1CvZ}28uq!#(j4%Pa<(gB@5`gJ`nEJ$Jo?YrC)o*PNEmi*N` zSA})rj8qm5yd7Z#T5pEOSxgg1(u5{`j%`7RI69x$)5Wf>8fbx0pzu>M5G{19X>Kqa zqsPCD=n2|4)Phc%KzWr2cdpUR#*jGyhZ2YaYhUDn!TqP%qDXLLVdLN*e((};8)~}0 z=W{^v^GE)#>=WWvtEs>1pKKVLijAHtOAo!Ud4o46qVBC}|5(!wMv%4j(`_gERn;C8 znhx0sG$>yB-E^qnQj31dj+Z2%~dm)Uqg|kCo85bhA+^3aa|* zdQgSf0%%8{h8QjsQ=#lzOcB^aL;PVr2=F9mb}*hs;H^NkQ4O$w$})kf8joS1Yh#sw zIhdqd0k5NG=)jGq(hw7@ss zh2@7}40rxo>yN(*pT=O5|(TwRyZq zw^Mkj;9Nv5-TisQSFJS+Ta%dkVDpFVxS#Ac8mMXhqD*!bX1U#+;QMKL6ZQjx8|Qgy z%nyuQNK$|QD@-T!FJd$bvO`6bC-p|e$HLTz&=R(viy=?d_L@`Go_s7?o|YZA_;|g? z>Mx>(6sBGO2nw^Y=v--L!XE3|&Gt?2 zZ-lONaeQ*F6k52k-Ur{Oy!{>St;+fmUUZaN{p9OLc-;Du!@S0x0om0V%1%D_w~^Xj ze-Vva%hY3rs~=nOt}X9_^wBe; zQ;!~>)r49`D*N*OzJlDupb)hBVJ&UnGTpK>t1V2s-#7O7f^uJd(Pxu}@yRZ?m%qHL z^=uihzZ|=Q3%09Rd4Fn0=a0?Rvsa?a_ryKEkkX=*WQb}x!S(3UDRtu4if^AP1D)@C z*+6Y2Z@<5~l0KFY5KB(8m9l+e@%&wQN14>=@kXOoAu0aRJhAAOec8k_v%)f}JXG7N zs(YJG<#~0E=sscaFpMZ_(ojcjl&RS3Pv~cFbgrnK zh119KE*58{LmW}nB$H5N))nOdRY3zVJh3NWI4V)0fKc0YQ%5Z#NOr(OS`ueULu$;; z{JDQNLCu)b>vrhr<+q)EQFzgwFD`O}W9v3TRfLVq{D`TDS~g{7OL_1S+2zyX@K1fR z+wvYaf2l?3k=1s|72a+A<3ad+{x9sg>?@F!rTF5XZDmA`SfqdZ8QH0|HYK64F#CGB zN8-5bTzBN|GwDKWzZ~0&YPk0uYokc~z80`{ex%lNY9!M^h%TEcf#r$r?6lgBi;?ke z5Wg4s#$`3RTG=rSxfb4m8|#lyx7jwi5z-9Bi{80FM>I-sm(b7WPm@TSg5b0%z`5~j zLUYC&JuF<>^haGK6SuZj1eH?)tKzw5uyq+_dS9jb<~QYEcA1s{ zsD#vgKxm9KuUE9Ia`Ta4dZ)Sx>-~ve zxMh+4$Wi9esdn2%k;BcHQ~AOn)zw^qN`<{kj8EY^ln1YV-=46@PW6x0&y4sbqn~g< zPkU=w#H&Bs^6Pf46nw^Jy!W6UYT+~fx@F9TM!3@^^G91o%l*Ewv%|#9CRb(4$va7b zheoEee{>v=>wRoXF56euo|=#*Gg)`?$}}GBRYx7tLLcfJHlA7VKy$d{G?}JLrWa*& zDTIZTZVM?@R#H+|hNXc^0E&-}z0W|&y_#kZOub-n<+b`>^X9O+lx>c6w@4)rd#p}8 zPo?l&u?~;G*ohfI~g!#{bH$vCt==-@vA)MhU{QxU;5hgD9?e}7vgIeRP1bjt%jtF<#wpWaw6*|*a=Hh7H zq*i9TID?HMip?!)Lh}PoZEROUnxM)LMf^S09DM%dKtR~mG~Om;7f_MQuv{rbC-w%q zZ%}|4)msPPHIG)@;`xp)Pi_)L}w9 z;6Q7TIn)9F8PfNbm-aYm_0@LSYZy-n*A7bcd|H9ZJQ(aRh<^o55#&cOSfb1|$f|w( zI_3bI#4>Nam?XVdTxII|^#zvYo;(-#=)AIWvh3MQb*Eh3RnL39D+#HYsCG{H9CdTh zsMcuE#eS8SBk;Sinj!n)8PeBgIck*bNrq3YuEFc=qU`Cf98QM5psAabNo^n7{(f($ zy2dW4*5E%Jzr+p1YNYs5PnkDXTxK(@IJ@JuNsO@Rl3pSGE%lZhX4JH|zT#O67lq_@ z5_3G-kx5TOpSl!RUa{&Tatjqla8~rk2iTc)n_@wHv9@4=DBytX7sI+A73$bCTS~Q- zOG3LNY+B`{+%=wF4(TRKj3=mV!(W5_fFY@Ksa`#3?m__tVA5S6m zra)uCW}1<(bz>FqW7dLhb0h!np7z>Wkx9aYfdm4TOPR!g;e7Q33ve>LWKi`$Mw8Dc zq{75hNcll5*0>cr;7-GnP#=m@Xr~eDfpnV9F&pFpHoxazaoHS^N9VAFaBFJN|LiUd z_+R`43sU>P%nn*VD02iF_!UQ~{*EP5z5j5Z8yP*L$^#<;!Cc{XlE1gcp3VXNnA*mq zQNSIe6mvuz{1s#pGD>v^l^*l$#apXlN+=pNssD31P=Acpm>O*L`bc2~kG37RPy4z1 zUi{)oLSogtZo!5D!jJszC5FVC{oWIm?gY)?#|Ca!e@xrq>kytaW#JlUvv8}VQ{i2( zu^?5|Je0dDPFmoA-K%j&vyduXbn9cS!9Y`6S5G%JO#bcVCqFAlO4peI4$`WsFG{fT zOaj$S6#=S_Mx6Pnf`*;9JLk&!)HUN9aOe5Ev@VV8JJXi<13*USsNa!i8JflxBs$Ms zeeYv0dpPrxyiFIxboCV|3Uk)0Jq_!aEx&xXYptaD0n9W{(ly*%j82yksN|`lta5jJEDSivga73Y)K&cVsk<7WWg}0 z-Ud)$F~xw`p^2pjN@!Y^et>qNB8J%UX|c{FKzEi2v0Z{Cg9CD;+88ddUWMaTON7~? zJZ`FnfcV^0A5RC^aWWO)gyFH(FwYL4j1~-lbYdq1yry%uOMoScRj-u#U7YhUpuc?W zWXhxXZ$Zs_Q;$3;$Azf{2$GMKPU@m0B%&pf^e`%C_!OASNv2!ZuJld=)<^qf8?szLxlq^yGR1XbhJGq)HCA!{hHcC1y+t-t zi=65{8*c=>ye`@8P$kP5T&&%skP_BQ_t)Bg%d7GDdT*2O%l_j>OSc_JOjZ%wWL?;7 zjy`~zxe6f+01M%@%;M5_IIFJ;;zz?9SCZVNRk_2sgbL$`!4xG3i;7{$BB%i6d^pA?-m+zu_4;2cVBJGOt#epj~a607iMR1UpG zmKkw%?6QQ{-I2rSCvGc69qF$nxC2HhHLz+>Fl1S{*rK7l4CkL0KW%G;fqRv(3gp8R0rw^fmGk0&|>%K6T41TbTu92WB$AmhOPde5Ez9Ud=cMwe6djbZ*;WU3; z+WS}sMX6n){7QH5sdX;We7IuZAFt)E9cdG3j1l>1{{^n1jgWvvur8Hv@g;9J-TEe{ z)1*%2N7C7A&8sf_;Zl93r5mFg=Ns}?E0%jVt6)8g{~}h+GDqaM;)avwm>jj9#V;o} z+*H=*?N2-&X3NP9|3l}kG538Px^w5V&yp@uSX0H%>;~I4+?xg zRT@nT@(zm8F0umB0Sca%nP!VZe7fgpdT(|K;E*ds&zzW2&7C){*QCBHpxP1H&{v8% z<`0hjEL$c-UcenCuL52|@`KT}Flw1C0E_`mh%!0QT%691^#KT^4B!OrxVdz44@Hnv zsh23n*I_M^)ol1oO!v)qo_+gpGMZdqdEC?e+(kdoPbEBTAZzD z(5`G@)u{kc8*HXLoZ?Wj<7g6R2J>ywYDD)>Bn~3|D+!UiJryq>-+B1A$CrelY2rlr z$2;a?A0J+-QmwG-NUcr7e@0pi+vRpnB=m}PH7a+YOK1Ji4SR3j*PLYb#rJEWN zz0i+X2h6s~a{E`o=a&27@I)zy1m8BO433pBZ;6+Or2DoZ zwMSK5DjyVGui&RLG(Lsf%Q=p0)w=ThyX)`r_gr(Q8!wgX`B1it?xpOjxO~=dmK2)0 zeXhS?FnF=@Ld4<5S?a@-*j>r9w9J>cpnEZ5Vjnwu8qXI|ywHdH#FpuuQtM8=0~VrK zze=0(?O6kc<^C>t*Vv>fJKJ7{5tn7`U)V|=^*Hgudp;H4e0We|JPWsrY|eely)WgV z(R;1bWc65+*y~mkhup#&TgC))8^POK@TE<<)KbQ4EUYl!2_^Yj!GRv}ThHixOIhf$ z%iR0(iEA=NZfE09cn?3f^GFHnJ9$##Lh7@5@%3>7g(yKb(&R_QSpJd+UjAxL`%;QU zK6o}a7*+(}+mAXEn3%DO2DXMod-C0;%_=TDUPi2MZ^MjVLd%F)V(7Bd_ zyN7pZYqW|=tyC)rVcoSmDyLqmC0#BvIhlYB7#p0Rc?>0|$tRoBdG=2k+|G{JeHAaQ zW39UDfyD*Q8=o|#^{Dr2Zkq;lx@)KwOEdghK7|QlHalV4vIAa8#Z8D7_Dx=S#r8dL z%c7@FQF+zT173<_UrjG-=sew6!J>|-W$)Oj=B6HVtmvf+{#!jcOQ$wJtNn0r+ zx$f>lYGOfFOWKiP6!p-n3E6~2Y^RCr@=Q?y?-#2=Plb&mYIe{$F^=CH`V&aziM8n> za@#-|Jvmn2 zG17LcJ3Xnk@ur6Smsw*2@v@KCtz0xGs~u?=)NU|&rqb+$z^eP7#%tYNEydFMA3m-K zgwA)6+|fZ|ogEJ~CScCny4Q@Fd5dv;ySaU=Yk|JS3*)N9$H_d_8=^<<6MA*uj5Nn) z1eciY&lO{Y^e^lVQWCqqw*tza!rkV|0r)2D__UKwnu%jaNxX1=ey{Kf20P4(oIrKK z-pi8z;L@`~Y?%ii!M=pa*5gBEMN^RdyaFA*E)$*O+>nmiV|veAe(pced|&stCyqQn zIDU`9U83EhZN6K3Z0Vb2*V{^@S_0?yV65EPKK)Hv(6xw{e23yIo_ijM{DBC4c4}pp z*mr%&>(6d>y!$4DJ8AZVmHFF}(4^rH_q|(XJFI8?4yBPlr)i6!h+4EThB$ry=Tu8a zKejIijI8}O(!AywxL=yV1_KBD!>1>VVT@wSjHVVf>}8amm!k31rsQXfB}_hUn;5)jKi#U*KsUFf>>e@O z%8}CQs3Xzada!?wvaDiE)p?(5QBJ%u>CeVbTsdJnO(Wh?x@=}4=^?(L>x*?_s+tP30O<<}x@#VY5Tlk;eG z-?(j1f=uQ!23J&4F(?(lD%^Zj16UP@L7*7HWNlSV)sO`MuI(&;woew7Lz%4OPzr^B z@U9D$w8>0&SnA>mLfEiPUJW>@RV7B1z|#4XRXr+|5u&z0&Eq6SRFb+3hRs)&+?W zcdxqRTYa1lSUOsfiXT`ZWb&0UTEfHogR+TRP_v&M_Rx|!V-L?Ut{7|EqYi$lSyN3g zd%0GQleMYYI#fAp-DvvfZO+EHmLTYBz%lKgfi?j52M~N3EEVLdZi@l?TEOrC{81!O zhTy>SQ~!1FBmm9RQf&Z+#|CN4hV5B9;L0e0iKKASPDYhb2hBSnQhaR+wUC4D)H7+u znVRNWnn$iqP_~1R`RD}@p^-Vp`GR6x0lU;xlHTnWZfxzF_VuQ{Pj?bSaSOwa<9MOT)mnP`K<<}Y5@`;`Q*%y#5m9Iz za6!qBrt8Y4%2pNq*-U@2)iDpkT4TC$)HH!dUiNvUHhI|n*dP;CFOz`VeM}3H2wIyq z%CTIlIo6iHncM399G$&Au4wqyq?IoOu3eK3W4QAXE<|$IGWtyb~SY%;2_hSpL4U@fF^Zu1b!YPM}~& zI?f?7Q)NK(4zw>(Xvl?p%KXDQMo03yWW&}`UR?Hk$-MG+6s)=t^iVu@nBV%2F%s|> zF&X)@s4@L?a?lG7uJxm^o>`eX!4t-((>GQaLc<>-cXK$>9Q;INH^QI(n(-IJ_2EAC z@z>b4o5c(H9;>*nIsW|Nr8usftC%MF#HW+j(L*JMpk?W6?N5I^uxGnF!0xH`Rp)+7c41X>X|M6gwsW@J(K%gws<|3 z@N8D?#O>~Q!->>bQ<>tz=xVM8|09VHj-NGzsYG zt6D?nHBHd{QrWLkP4S~w(#Qd+Sw=3W6)f=MIlsT+6N_>kWrxtnt4wD2?OW0#x2tZK z_BXbgOjM>>KNmFi8{EsA&?7v90g4OU2};{G4p1=$S_9=_bSxZoGPxd}41f@+Uc1`P zUL~;<-y^lC zKSVeR$G^ob6P`HEqW<*tWuSQHlYd41A>1y!Inq{I>cnnTGgz}mn)5Vv#<@Wo{^t1N z=9Rj&ichF+%W)R(?rw)_?r=Cc6aXER%s`2K36*CkDK)TVqpvuz`Ts6sroo%Txu4JeDGiAn5Q4z%K)#RgiX?HdVd+LbH26gP?ghI_1TIdR>9E4^JN zZjR1dUT()&t+p(h-qgj>=OPmbCr&wPd)y!HNxW#c(=zz;10r`PzsXH*YvaC&VH;A~ zFXL}Qz8@h@=f6PT6EY^@gM^c>VMV?u`Zv2F1P+A>r~dF3p20w89=f!mV_QYN zdBeRuVXTN)UB~TCBZ~-S=IxA_YIZ}3E?={rNZ#w(V{O!T+2v)zCVm+$vrftOae)t$ z`2kJH!C|d51EzJ_KK?khi*HFEHV#S5-SKz#D%mTQW`6w4I6YWJI-rp*ATS%IE?LwU z;X?VsKBHrc7aaZ|=D>AsDZ~R8I=w%R;HqvYTC{SC#Maq4bk|g>x1yHEyX@5I&f8^} z=TTFtHy%>?m)cFD`VE+)(2>QXjS(*$Ex>c58_*zO!Z8W}@f@a&;Dyj$ppnuy=Xhxq zI-=i+T_7#r-&Q%=Fe$0C?{%(^(RnOAMjTzFv+8Wr=UjunyK;b#Gly^%P}bFq=WL&A z^vyP}@Da8|kmJvs`HcQ)E0kTrzU{i_XG@jE3br)uiR8=>cAA}U76_dU+t(Pss;o3G zS9;ehhlRbZ{ft+^UfE66u}-yOOG^N{sLJZY0$)Pw0t4#~#;AG%ZSU5{>iXEcCd7n6 z+4#X-qmWT&E}B@TSnvw01%xx`hY-Sj7{fX(%w1C$Hg|Xl`!Kl#u};P7ZW*&~h(YXW zHrLd@+SYe*WVl>xS001?#SV=Yw=yK?ycd#x5Vsz4yGHs3zDT<%L$4KL=&#=@a}2h0 z(2hF>Lo8r=gX~<(#`!e@o?pmtii+EY%2^+M8UwER_|UiwH|Kl#=U}3=E&iZS#|N)J zU7pFZ!9_MCHo4R!Gro|qIt^6;WZ$nU=`p^s>rE;&m+wK(j8|Ry(b8p?Q8F1wVa80d zkI9%<|GZ_6%f>IOB`GSBl||z@p4zVA$l`DLz2$5oFLTksaxN4XqICN9xY^qSBS$|} z{Iok79WJc z3dTPV+oPMLEXV5=aly;C-9MW1EA9!dff)aG#ZK@!1vA*Pq`cMY;C5~9O9`@e z1f8q1A`_Z+gfWbLZ>Ynm%>zx6nA3U?s!7H1{T z<%jk1A5hSZ_WW+q)=KMc1&S!m-9v>&a%oF3;_G#nIO!9C2hiSc5ARy!1`qyUq=T|E z(B5#d3>5WiMFvs}&P0!uKHqiHic1FKvC`vQQBUU_O;Xh|XXB?Hg%5}UvG*)X_5bHL zfi7_m^DFyn2?v>^FnuI}3XtXUkxJU6B+? z&P}E>tjFgK9shsQe2M zjuqb}bVHw}ojNrF6ml?2`M_8d9hIJ3nCgGZKhtOB=n+KmT_vbmr);{3REB@8>+taa;jRD+z#p#vyPD@?sqLqY|hfujf?pgsc zV^e(C?qD$B=U{1S-}&RfdM`j$k8X$3!dfI_n;mg9O3UD1AsNh$9z9(E!J#oTt-u1q z)^K&xkHCCEl#%oDSwlIeRrZ@>&3^7#MrYMxRd$Abmvtc9qUOrK^spVf$BAtb{$@Tn z9KF(m`e-Hj#XnPKT3Ot*?qZ#OYwO4k@4v_e9H!#V8?N3cyud!IC?00|pLC+fqE{nR z@<0qW&wBi0nIGa~>w9K$zoNLiukNuuPkuPM)rdD^c!9>28h*OC4aN^-_|VGA7s|j23;7@}47wI{LW~9Ucdfxeo3jO7izse0G-(_rOP2x zhv(Z-?qRY$|60S|gpVsOmR;TaK$Arb2vFVwBHb>5Mr|udHwyV2JHD~crH*4##=U3= zcfDc?DNX|yQC~)Fei!G-XL*+*dtElpuZ}F@e!u1ZN*JE}2GICO`f^`3Lu+xY-4OuG zeK#BDKHyZsLzCa$L_U}rNv%>zr&R~G*RK6VIBoKaWnIxIH~oE&9uM}5?)-wl-gJWV(xyKsDC6%O4!wUX?$i$Y6z%Uzr|SSH zDKDh^Clc<4_eOoiJHJhoytY0J09|5J<5$z8-$E8jbu70a1`Jza@Nu3*GOzQ zE#@9i*_TT>~M67qxw(7ED{8- zdKP*g*r1OY&KlMU1r+Rc=eyl`3fBYgg@nK00}F;SsS}LXWQXf*f>w*SA5YSEV3dYA`!DGn5?VR4uJ%DiC20ZW z-f^%R24VNRFu%)<{y17^ z&sX3Vz|0Jy#$&AkrB~DFiy)&G(?#*kZ04QsN)doR;9Wh<{1l`(U)-o+Y4lr{2>#z! z;q7jp7_z_ZO}%m5a-9MAE%2j8K$~Po?9-DQQt>dP^Xe5nRuoj*rEMJ&e|%5FMn>WO z`3F87yLb6zi1hP-J&j{ul3ei3gNx8Z%eno;)UuOD5cbrdc5|`~;{Salu&mm4Tg=c8 zC;#oAcSnYmC2(@*uXepO>Ve9oeB$K0Y?g!2AJYV*{h(dn4T{bG)i7vsZWt3t{Q%Zu~P+>MCh!q&>}R;owryNQ-<$F#5<#&10~l8m!K&VaYbaHY;FH*@dSGE%}`@Iq(-b-=|0AWXeSbr-=4+!=p^Z zCgpB*QHvDo_8P2zEb=SrorV^&e?6Vb_WH^cSzEhFH0<7tYJN`wlsGe>w;Zww1gU7i zgt9S?uDOE`nc3;GEo87B08!^q}^dkX^6zSoBR>nHOo~Lianz%RXOJ z`O}NnWomr%m>#NWtf1rbo_M}oRHl9Tw9}KB7`#qm+iP9q7oUBeFAcN~PjVTu_8pe-@H zl9$O~XI5CfoWAs;RA}0Eo0#dtYQ)-_<^4cs)H6pZA_@PJ^=Jb4dOpw*;%K@GOcp@g zj>1S{@aXh8lbVp-R89;_rhq19v*=vhaD}EC&(LN4*^dE%-yL4Q3H6Bnm<|@mBFu~* z&TzNF4_pZwTB;~#b$pWv^)F*5VnYc_&lnW;0s zz5lmqGE5d;fz^p0cvhGU&N`Y=F*Ees?cXYA*ZshUM3J9Ya(pTi-q-u+&${Hsaz!XZ z<(=vbu_mps)K6=qbUuv)X?}`JnySkj%zJ!6F8G{1k?~@)t-}{u$#*XF= zt7up{?*N`#sUGlFfC#*YbALu=`ng?aXg6TMu@|Y7;&Z5`HsGrz@AD*k{XoNILGEh7 zU(fL~&G+|XZ?NA>e^ZpX?*y5vKkP!pNX)LR9;r7GM_YvED=zqtYBi2^Ik6K&c1n$R zMobj4Yc9tcS3KQ*DZLf@{l=fcvrjS_Pl|+?Iwl4eg`L#=VmXkd%V#~5g+;-0Tgi`z zNDHg^0Y$U>-;c%yA+Od6m2NIyOp&&4HYWEuaUOPkZUCU$SB&4tdiP(XR^VUbCkd1_ zh`jNNv4Kx72lk}AjH~ck)YU~Job2=xh5}Tp&B25Wu9CcbkixsI1XxZH=&-N{k_No{ zG-&ZLqyg@*qpBfvj?rv3s*W97I=B2Dg*jf1W9T-@2Rdl zk1%Xe0z;}(*CQVFgzj6Pmi##i(3B2BIO^5qFka;S18Xf5uBlUu;6mj#^u77N{EPTqsl6j!#W% zt}sfsmegA2KIWG4Ejca1>rc8p_BTo|TNdYNb7XnhDZ*Iw?BO40jdiS_8e!H*s0f$w zWaSjL$%#*4&Vns4p%2;}tmE=8eJKt;Izi#i3nmU-*gR59Jx}1+bIm_+IA3tg*yLR?4*_G%~1&!6I`sBX!#Pj}xkC7Z~Ab2t02#S2-hy&h3j0oQ8T3$`VWL zVn0iI1~XE5qrY0fWHnShOjrbhSxc8TYl-YN6gbpa*$LggzawXj-Jk})uh*iw&S7HV zDA`W!P~OC3dArqhr{gZDZx}YsUYS(P3eCMUiGbUkjupYM;jp(x;*$f~t#}m24beWu zbG?Ry+Epj^!7Ic!A!0H<5qKAwwTWzxmYo;E{oK1a4l9Et`88A;y6^eVsjjIm7gL~} zYB2DRXO-J}YaFwBzr{JV>YJtw#ND8my#-T=K#Gqc_bRsK|6%F66{Ac66W(1=<`%hQ)o=~smj-rqq zjZaeU{v`b;lb$ibm-gE+ia~1Rt4Yr4vSQqnULCA6D&NZ7(BMsrpSIW$`aag%^8Kbo z-zEVG;#sKZx}JETS*G_sC*sq){nWywJZ4))kMp(CFe@-9Q`obc6v&4@g7kuXI0pgt zXdsv)WLQ5=XWmm0keG+vuKVWKFUFocO#qgvNTn1ufYED@u)SmoK2f^Mpw8dp&xF(6 zO?EM5&T5K`es{#(2KqCWopC+e<9aomUD#3#3?lXvGWTFGUUPVpgVEg1kU3-$z(NJbU7Mk|f|nn_83Hbtu9)D!v(eCk@ z^`2d`I#iZh<}-0BIQjQc@{>>2l*c<2y}fsq$)y@V*Ko^QcJtb!x34Dr9L{# zIJ(~>8kUoG{I#HiM{<^T+%?qlJ)ip!*IxGUSBK4NRRk@j_Zlu0VG0agx6b8DewB8Kp2#V< z>=RoyFF|v>D&l=(C8T;~Yii5)+P5GbYw5Y57H-#tk-gsb4vWi}+x$N}8RDEY)zkUC zeEWHO6}c1%AWMnAVQtBL8NhV>2RjN=Q6^BR!1O)@Zk|NE{-?-!XW!eId_RkRR|F~& zeUrM)5d_5GJqVS#QYmt0+I<=AffutAR#^?q?uFS!U6q)Y?$>Z;h;05vHdsobG+P$d zZuDBC5ucvZ*@5M;fO83Vp~Vaw&uwH4Sn`TcX<#J&ubi?IR$}ftG^>nS96!Br}hl&6Vf#j!K9Ds+^|7)?dS(2RZ#Xz^A1>1+Gg_+31qko=VEvzBe zI9iKn81JhaWYg~IVkap+NdQu2#fL#zXrB`A_=IboU`*(*r86J<%=|9a>HiTkb*N3U z;N{62g(twLgv2JobO+_J2D!YFi!ZHo&o_&tvkIBFB~`+#jRmQ)ZEw2eGg{Jp2P_@t zNU0jumvl~gIPZI%lD|2`*zD1Hb%}GOvRrQ#`$FkrNjib0CV2L%u?@F{j)?p(IkMw} z678UocGc4$3NkU5;)0Py1f7^roDLl?D7-Q=8^cuyrP+zB<>1cq&p#Bo6!c6$qS;NS zVv)BNkXbQ%rqT+;A_#n@z?cKtD4V4IIU3MGREwDgYETvtAeR;srIhriI`nqfNA647 zm@D~JCdil6BjY61VqE0h4tv?#>+~N>=*9ZGTO1dwOpIm;-rLBgd<$fjhl_ZX0H*D7)c zleAteJU}yc-L-qPfUrlhBQaIO8Wsd-mJb(7D_*%SqO~)W9n&v0)~;(b|E;PUi{5%$ zwD=)teeTw5&NSx5%AiMa4tneTDvWcvao|EW;645{?hUJ3IRSOJ^~sOOzesY|sV4@3 zf01APU_Uzy)XI~X=Z#a@L<~IIsZkB)VIzRd5gwTZCCr+Y>;Z@oO2Bs zOJ!H`UNx;Id5SOF z7p6$E$VmGANeP%L+h3{fE)!uDQlH*TnIpu@q;=EuutvdqGTtTcDtbCud7hFOO8tqN zKDP6nTrRMaReQGA!&bp`H*B)(m?VW%{^C49K!Myr?W9mR9TnlNjYm(4A71}cDTtpm zdJMJEwQvckbq=w_5MyMu$qF2Y^32&BC7DY)sQD2DKJBQusJsdO#-dm8DeWSLS>h}5 zn@2aMS2OP4oy78F*q8EcwrtQ}1KCNU9o=4UbfM?RGK`h>icf@kZutYpS@FAt%Tk#q zEPJCfx&Q@#-II@lF4BgklA->o8dk3C2b+34}tEb%ju^Q+D^V7?br zuzhAY79IJsFdeuFjU`@jz)nDdOuIiW(ppL*Rab7tDLL#rIG6I8gkea8=1O-6N zRqH)DObYPXjOsOqp~*`xvJfM=TV!9~t(mQJw1GHwNg*(?$@{Vu`A|MLWf+vjVCJy3BD=rk?Cf@m ze0?97CeMAUR(3%g$vwWu9ZgC6$7}w$CJImY7ju0cXqK-NZi4NJEp8%{xp!~UhUY|) zS#F*Iqbn1s&4if%+=qcz%;rl{V0orR+JA*%Lny=VuoG@GEo@G+HOEJsmo0vCCMoaw zyYrN*!Ro=N>F=&tPwO~E#UB!0TNyom*e7y)d$*=~KH;GWw~f0ZuN|0wAfirii~*P% z07d)mRJ?DhI1Vu+1^Rc=5c9Bn%anOi(KFYAl-7i;Lpilqb({cv%PpoDhHS}7Boe+H z1OAFEbwF=VU}IFzw|I`l&o~L~szW3WZO$i7@z^q;HsL|Kiu*Um)YI;EQLtP~N|`@6iRHwEea9{CT7SJrWfFHCKp$yKx;Ahu z8ICb-{rJ7n_mpjqNLqJkroZWWM$?x4z~cH3mj91Zz%uI=Yft57snJ~PDt?m|H<@3Q zg*Y?`9{V8~Hr5iy?F7OzI~njwgg@#`O}cTOx;XjcO!Kc&;zMiKr{9ZKmyHVK3xY4K zAN+2`XmF3ha>H~7Q` zifqn{mn@cwoI1h0QurrsaZt1)8vWi&bmaYRiMyf~*9fIpxZ-O7C=y!YY@9Vae}0KQ zOG0W$YOX6MwKpDIk1fO0KQ~(F*A#zk1WVZ;wC0Dd3xRQ@pIba6hX-oBECx4{=J}S_yuUTK%wzq6#_hf91N4nndBVOj_6^0 zqPlU7Q0kzaVA%!j8X9UmzKh-6Msfc&Mz~fI>~x(TT04>bvEWTapOZT=YnVAicuiSz z#)a<_&IImxqhdXC=gY0w0QMnxFEXDps}LG!tLMR%2{&2aJndxgX4?u4820kT<(rRL zSIknD+zop*;wo$7{_JRy5>gB(4eB(%ZditiJnS=GeRYGK5PzP7Y?Ja7cwyzgvCRkd ztNx6x;&14k$`~J8%OG=D1)jaS@#y5Fop$zWqhC<*1aS1F0!ubW-GBrs7c9ngM=sF>&H#pBW1T!x;nY1(ku zALD)pKH!u0kHP*+f73p|m`xhG2$#1c#M4|N936}PXIQZM?B6^C>I4{v0@?Lgm|!bY z8^n^GOJ)Ug877zl%>xYKAoQMqMR>Tf222)W=J3NVOdt$SOuaZfgSjODG5rIYoSB+% z4Dp}yOb+0i%qtVN_h1_^12?#D-eWN6uzs8o4xSzw;d0>oVG|evM4r+W8ff(YE&6LS zo#2ZyYgGYAaL3|l)Z+Sfb0!YFvqV$YEUFj#hOz|cYsInjcGQZ{w6#f0(;EIGUMg+T z5;KY`m7*pQkMOSdjBeguWrUieOZamIcl6Fa*t!F_=@AN#a3@Akav@|{rvgIC9*XI| zTnfXjvzP77`noyUj#vdMdv|=l_Gd|#zBP#Yi@1v3-{es8xin}v#%08vhiR;kc^=o` zf6d_dB2Mju?rOEkx@4u#8ab(zxm=}i#WrpGiyT=nVlcX21{Ou2J9{zRAv<*NN7lJd zs++EyGP>R*m8~&_Y$&wSHPp7IHvK;}SJo|1%$8gwX@Mm#&zuch4g}I`9@!nMjD{Ik z9bAe7p{k(5Y}0TskRF2Wjag^OfZIatXF}x6wpkes60d*Yi(NNU!^s4AGjpjN;8_RE zSSE$96+@XIirF_=+ROaH@)zgez$PF&V_#l7tek3T#Ce=F+==XiHVz`xCX_#{nF(q( zmQ~1=K?_3Fc)7@_Rfg{c#P3!+ekI;QP4S{|KvkTtEo%8sI zehCUiucoaLB*nOl@75XE9ln9x0v%U1_67QP9bE5Ikm);ihuUTJG6`ES;D<(D5c*?1 z>CdTqGFM+qVEha(W164T`TO! z-=6F#aAMy#-YTlj8;eGHPsrhip|^^qgcLT*;8=bKT*!QG{1LRhhi3EbdB4Oocs10{MM~3tII`&CU5qDjAq4LMK|4gzBE=D6-?Sv9Vkm zh+&ui{Bpg=Xp)q3|MI1G`F>TB!S5Q52rg5&wmP}CcE*-zN?I{C=$s?2>_hJAUi;*| zDpo6V#h?>`O4dSUrNfPxOW}e>mG-jJw^9&C%B!!r{76gFI~=h#*NBm`C!l1NEi)`| ztTNPg^9+07d}*YSJs8K$by%@ip-5k#HL*%O&cJlRZNo2*zS8rPpoZno?3|mlgDDRY-EuW+G9HJh^hYRy%MZ5s*LT|{w}kgMrM@gA zqt_Vs9~?N-=o8;V6vxh6vQQF4EpC5NW{}V5yw_)!OB8;Z@G09oU^2IA3mRAjiaw|_Xvft%J&sR1up^$BCFyYv z9aNg@a-On{-+zLl@dmgoTcH1!TBj6IpzZOhyk79w>}y-v&5qb3^(z>ZC%2ko9BnjB zcq7c}dPLY`SJqFyM0xbuol~)kbt6qmU+5AV4X~U)6VK?~bL3;?!AZOI14e_LjETZ~ zZ(cM4VJ78Aa9kX?9TB(=KNiX)3D<8If* z6m_WVp@Dnzix;QK=l)BS9aH(5g=-Rl5_bjA5m^-`f(8mS*!po%g{@)9{}Ha z@;6NurWK!(T)C3`cO2_p+wazv0kj6$rS(gfHhL_=_QWViYks(P>M6H2{%pxvH9^0D zz&k0o1DEwSn@8!IycLEY{SET_(m4dWx;Q-RPv0Y2sCGoKPUF+hUaUJT!@oDAU0s3a zh$QRe&38z^;jdv2_ehCG$H#^how9>1JjQOJ+TE_^%u+kv`q6ZT%&9N`2`c|MY$jW} zeYLs8>52Gr#%v_h)w}eGEFHo#QQkIpV@DlSlg-bY!zlIg9`YltGUyijD z**PMYwZp4HDRMf|dD(%{IH^5U#g720=8l2mo(hx&k; zy?0iI$aj+2Ev>V`?Mah7pc~tfvDYrzrY7L7kUyI{L_77~;MFIDVo(u_OnWuuoh)#Oo2AljT`A9D z?_}e0qbOtU3d2%p-%$Lmzuw7@lY_6XzmG$a;sDF#+PESwJFulw(t340a|6EzVcD0Y zMBh;SLZku{PbVLy2opeQY#*oJLL5<6{w=gl48lTqN{%&`1M-?G!3vDi@}^J#F|zK$ zDU%RKHS0$iL$D2vfkp%2R)Ff+1Yr9=e^XGwqD)}C2qq_pm222$VA;)SNIN#S@o5Ro)g{sJWUvAA(~_pD(@BVX&Oc~ama)djvpi)t2&{%R z5AGDQI}*#T5`r@*uYajaWotnDxZodK^4LnB+U{FioAJXjG9f}V^>9z>?mBLbc3}iR z98N*R{bep&CwD;P3m7MpPm3HAL1u#JmuH_o*x}jqsxS;-%Grpj#MQmr$-|6knVX9- z1(zaPEBN**R}FaXx*zWCPJ0W*{$)SW$Fa?)q5ev>{yl2++-=d01+K4N77^KRLj&|= z;%W!2zF(GR{o{Ow!>cG|^+FWe(M0^kmi&vq(mLsyDgo>kLg|mbX1*ygT=qVTh|mVD zlNFj&g~FxMwg-AQf*t^Enw0d7sCe|f@`qu&Phs*o9Eax6^RiQA#Z~PMxRiAzZn7$UqS$&~mjCbZ7JEr2s+$`ttPK<^R`2aVU$Ry;8gOWkZ~W;F|z>XE4fh$EpNqmAM4jap1S0 zQU|2T{z;k3n0BDw?#ymjD&Jpz##Drad&)>G9P%F?j>ja1m;`u1z} zZeK9hkObATqiRb@xG;4;83A>6k-NX0bBz`6m(97eTxUz(^Q1=Ya%1aw5P6uD(`bKO zRQe|8XW*2Dx}0&HE=jh#>ePurnat|1xP9=Z7@o=hEynJEVu@~H{NyI553ye#znDIs zlrg2m7A8v0yex|P2>qpqw=yL4ih5;7@;dIG86%c3`uy?Q$HJ3NJFX^gYO9s2v}k+^ zeA}yrL24qu3@KW6Ab|!`q2Hr}M1r!qE3Ac;XU{Z`pHuw9P!G(8^1=No*Z?+Fx5m3A zKUr-~4K7vEILuvMAI}|s>GGupwXx{7+p<5tM3);y*~UfPX3vow{|Q*8NkA=)x2^?@ zlq0-SyTA0hO(h#oePN#h&w*c8&UW8^_o9;fnx(|=JMp*lhS}VRD6FgSNgFn)l$|YY z7vi2OmIv)z&<>w2RB{g%(V?(OT+q^`Q?8i#zSK#p^X}@q5V*q9DdM8iR<$)<$!G+( zOAxa`dk?bmAuuvD2Lw9C^nkec{;Q{hxyPbhYHRPP3AzfpS|Z?j0JAXEeq~t^SbV~a z7G@Fh0gM3XWdB>h^u;aqrZStCZBrFPVQ_p^;%ttu@EY}@HuNe|@ec2Hro18w2M&u#Fq@U`^oZ9|8)_Rf zv7F`-S;~m(Vzq+6-J%5=EFW%BZx3@>w%2R32aF z5ca{-xo^85B@ZRxMf|UKr>ZSAl=_l=ZbsdcxQW=>k}Cp-C7O#UoeQ*ed;8rY0wdVn z{uRZ9PTR26p4D6OTSsDRk-NM0*30t|ueDizxZ@hSVo-dtBW0=j3p;YOOinw@mF2kj zeaad)sB8wa^S4~M%6Gl^bi{)6V?qxtPam}PlYY*vxWKg~y%JEBb!~nB!2bH2mf5GH zNxg&nuCu>6bFuWyp}_SjJHA2%`bFC8vBh#2H(H^wR0m5Sh^+P#C9|?_m@d*J#fx*i zlKvuG8+75HmMi5Kww5*8Qr2q=?T)TzqU0<=&4gRrCw4sUkb~U8Ic~>mha@-3k!{7Z zpVyo(zH)fCOQNT=n7FU~rO1woO?%v4S)(YA7|FiDuEek&2#m*mKn zS03gRpWmATtF|%xGW`|#0_+ug)nf=>2n>{Xn7v2OC|Om3rPkXg-K=DsHI$V4%lK92 zwq`bU235cYG1EoQ_WXZ);TVPYCI7e*mV6n*8$506WG?CBkaxgkPdcn*07B;oSC$og z0cQ4-hu$6R5Is5d82+!>h+RvV`olJ3aN1r8}huTDXoG-*hXht<%6_$LcV2$5Yl*Fw(HhaoYI1B9?EMthHgoZI?}@)8JbAGDOtpO`f|bYu2cxaYB%Fozwc@OMCL ziFAsGJR=zPO01-elW*~S5@@@HAztlVvNTFifyGziz?QtAftWwba}@{w=27xVl~JSb z84@;y*^m#TKAHKt#gtJ0A=%biV-1{Q z2{>D90zgM(fa!tr;SYBLV8YB_6~i_PfF&eci*zQXHdx)k7|VY^NTye{^JBu&ZO3Kr z>~aMZnqAl_-j;cpD9f5+UdgtOr*J+loYPbQ2-Yg-jOZL2P1FP?Ccu3z=oTatmFh6bp?nVASnQ&PY6AfIb&+&eX({x zIGhzd=U@7Oy;%%20Rzmq3XwrYg3fY@<{N*J;ta6na=%%=yel0XIBVM?2-j~(HfM4f z%(#SY(`7E{GE79mx z=xramZH?>?Y;6p0mPsteSL?evX}9RI+2^~)jnw5|wia5W zFHXC@Nw=cmeh&1^*+Vz3xt{>E zM~y&GyfcD+AkHqynQGA>Z9rTuZ5HRz2%TIiEzUOdxjfO#+U3GPz)T6gmP)7P?i)^O zSf@j_)`8ZYfv1+lAEHCVCJ2`E0>+=scf7TYd=R>M^|T-}G{pLUd71!F_im$bPLQ#s z0NjnjKaS~=8tduhv~kAr6f$bxJJXRtV@%FJNztH%A{N3+$Q%ldv?fVOSO>TWl-ymc zWOH#|WCMm-)T1%e6N? za!u+)hI=Ng+Pl3|)!Qg>Tomq1A7G@7V!%+Jin5D}2mmE48|;UBcd5Kw5%^G6@!|8r zUu4fcTzK<{21FyM*_o+{c7`>Fmsbc|sSkR>9v^4N1`b83u=h^~yLKIT%5r#c-~yG( zfkWecbNI`cPaFdeylDxi7lWSBNzM=KFvLo>U#r`mJ$js^s_*=~TY_oMV`WlUVWh-l zRv8_#(8F`eePMdJQ6Yt%J7KHoi=x_a5-e@#QeWFf2vd{*-94GC@D0bRu)DOR`;0Q%nU0w24fz9lp>Xfwc&jtb!-aC<#|P3mbe~%N&6~ z6y0t~*A#pbcu6Dq(?*4R;@8ciC+BL=V2TOQ@P3De@kjATN*9jYTXNt2^t`(9ghpxO zaGjI+%Z0f!Wzu5( zAL`PTU-T75_a!Y=*Kf$3F=j3T)waLlU%wRh0s<8;@jsZ{igFo*kd0g_6@!%Kk+(q( z$V56xk%%XqRZ&1N+$RPJ4a^7zB_XnKqw>Dw7(&s1SCS}c&u@T1y!qjyE2#Bc)KU|N z*CCVUB?=Em-jX2yYNu6SY$;KNOOJ}>GCGGxF_Y)U>wC;s_%;Cs&q?V_FoQLb1qKt^s+ym ze3ULCiDD_<>{5l+nIo0Q>OGxD@07XLQM}rsxP$pzfD}(l+v4x3f&>J^8n%*^Ez$DK z-LV21Sk3?_aUhyt29so9fX~Gwmh?E8BZ7HR--Zsyl=;k{i!7bpG2t^hAlQNwb3Msx zkr_s;ABVEFQ*C9`vs8$pcW+lL)+c@w=^Wf~Xlaq>Gm4ZNV4(c=kv!+^IpR48 z=GsLzC=5bf{9z@aLj_-IEXO<Vy%un z{EGzcGn&t^+cvEj21@8{2dwpX8cVK1s9H*uDFL0@xbyH=DX;fK548wk-?4lpxZe z+{8ybSebuh<(9CZzL$Tx*7hfNu4yX>D}9Skbt2n1lvnRE_AezXAoTn-mxtTF<)}53 z`R08fZ9C{*G+0#S0OX&(SWSZn%Mmlx;>*@4?p~5N_RhsnCE7|Weo71t#yuC9cAf<1 zv0faLz%4~>=g5HHK@2AOP%mn=BGg=@kmcRVb+LeUQ*9RQxoQQ}SHEi#Pu6-ORTHJ( zvAHJa(mS28d`G@HX8}_sBa+@}gS7&wxM**559@b}NbsYse@S1&|7bp;h_aVhw&6TO zDk3Lu*V<8-91sA;vO1+;m(mQHD-A zNKwReM?UmuJfc#pC6Midzw@rjCrdRi09?hKL*c-YTqa|0aD*RBGz1{B~lfG~&HHvz)vI=R<< z8`t`MsG*GsN9ZbyJnI*q_r6dXy0tum(G;MKB?0F(MmE)jTH>I zgyI#DOxojViDprp$hUoJ!_j4Fj+y$FENLPyG8G9rKac`%Kj##0PgQ%99vY2@H#A4& z__U%1Eahwz$ju=%?IE4a@>90(=kQcedwJm|zrjZqx>Z}GND}T*9*MhN7vA|0 zXVVGXfjom)6bt=I%A;v-3$=Y8sr9;DN#7c$w)7(E$?h-2tSBo@9jsPl{TY=lcLZQM@ zDB;8BFOs}(he~>?@!Mw{15|ZO^(k6!-WgGT*ljE56AF98jwSg4x>)wJ?CujhRdg<` zu5L={ExV*>flKs*&&2*5+VSMYP?g$C&K|ls`}^~!b=D7(PjhyyIdWVU$AMry zGoNh3A;R>tVyZY(UjvmAs4Z&$OPd1%KHT-(8c_L!Yjc4!YYh4n)IWiLX6Dm>2~j|= zgBFdD%qpGYim4rra%9`xo_8TRY=Kl*(I3KLAlCdHX#Il(KD0AdjH!7A_FN{nhLsmI zwTKUsjWvpaH9lFx3Sk^fB4sYo-RZ*p;6iAN+xhPIid{G*S74`38N6iP@M%oR)<;q9}%Tr|!? zh0ZFe>m(&3t%LLY28*~|9P1U$5ZHXx=EOtsN$K&FMV%5MG19^BcH7kK={9yzxRh5J z@4`Mr0R72skH?;rceglK24l)2toyxJp+oj?IdRm$C*XW~(NG+OUxGLsPj&o66A-V`F1ER=1sBj(S8MpCA%ON2NpDQmop+SbW7TU@{f|Aw3gFC{S^L=ykjZz`Uyem_ozqA8!6kzi1|UX)Xk9 z2(a`S1Kk#i@oDDTH06*z?8;gsEE_`^bkx6GSbVed>`Seq7+cfLB`(x&6e!Pbqnj0l zk4t_Q3+Fv6SC4yQU)sl2watj|bTzWAFFAng!SB2~)rLPDtUw5yp4n|@f||F`!1=j| z_%>-o?^?KR2!2zz;$(J>GiB++0;h^5ZT8t~WH*<$f;(T^1;_U>2_pHU<1T9p;3@!7 zk6as%f}TmoipDAFXU=U~%ZJhT0;ZN1aa2VMyt-AW2=fu>P)`)+B*4=p4DVee;H>C@ zU)B?Ep8VaL}GlbQ8gYGz9MrK3lzPuy1vIeWi`bSkrY8h@NB!#PU-Nwr^ z4wLrK{VBFG>lTU;h6BqO?`Z%sne@qib|z~w5_rQi?l&C_8KwWilg7R!?JQ} zS8$m*k@}KRofw!YCh`g&N|3)$kBlC8my|#3Y}Av?O$~@1n;^<}_{&UC)CN>v=2~|9 zFZdb+9$P@8bUSI(}jGsaIIF$8T~xqyu+WB9PW1QfOAYf=H_FA zk=zGA;>m@n;5`lr%1rYSW`l|YGhEUz}X+od+EzwS?R54188wnJ$dyW zNPM`%>@CSQY>=Q0zXDXPsnbUBnF7Va(EoP{ChKj$A(D+fd{jDge)Y(592Tdh+O9|T zB`~^fWWNaMFe2S?jSgBqo8q1)*e8&%y&3OhO}Z^u+*1FY6@jN**g{*TfgP>yJ&l=ed3CG#AdVl}Y_kVv>>~ji30ygpr4j&c<6xS_Bk`fP z0?W4CDW{g*^ZWkGSA3Mp@8%K9tJM9CxYrz=M@NN$aRsndN)eo&T$HZq(y5|pHvvvT zo2A$h;av-z5{s27FEOAPV8kxX{!<#j_SXY$Czjnngn|PwLB;_MA~`rYtZR?^rLk|j zk%ch@ushs?9CLK*-!XN0xe}f8C860E)HA%n(3CN2qr1t4e>yb{JNA_l%sFU@y`9MR zjDLp*c%>MIe3i{xij1>~kTgwMyHqjymz~|SGqILyjIqA|@E6Nkwv=j)JN|LX<30&t zNcw$TiC^PGIyW9_YCkg$D{l_F5bgo9vD((GVxmjrzy7GJhgdiUZ(8c63YLdo4~W_$K;iCAiJA zGob`pJH(o*f(dXtawxk*UbqbIax0uhxH57uK+Q^Vi3o_LvQ#n^dIR7>G9fVg(q1}3 zEA9TnR3^eyD8W3jdL(z>0L4Jc_1vR3(0hygJGy85S(*-!`LVj-n#0qZ-?Psm_C$aionh@8@Ysod!?p>Vs?M`6$Tt-E_phS4eP6UGtx|vZCy?7SA$~tQ+mz`(VA- zd7|Qr?&hk&xIx9mE+GkH`T`;B>qC}3;~jm@3mJ{ltO<= zvaojQt9csXc6|q>#p=xb=9@ox6A5YPFMtCll)oU0>O&G zqZ9Omx9sPajcL;khut$qLlAAB%7~lRU9UMf`Z(iVPJZp=RAtH}cIRItpK*FrBFdF5 zy62j-(Zwe*IQ@P6B+e0R%hTc58NCHLTNXU4fAXikQQ180osWY z44|+}e&n;tk^sXi2sadG==b=hayP0UD*A?3dX_g=OI%YiQo8@l+~tArBd2NUlnrpL zh06}$<|21f>yIQp#Px;Ilyi(ra?H%=t|uA&lx*27-k_CGBb(?QWCZU}rL2{9ja6nC za4|bSo;sO@kY3Cs*Tp0oZO@DE4{>{1=i^78Y3A&k^R~J3hOc|{7X_>Mwi0*XiiC`! zx7?=7Uhm)r%JOw)K(&~3*uTHwU z3p=qWybgEjdtiTM{+-U|x0sQXC)nNRl~r+jHI&jremGt7J(>AUHEJaQKY}&$s5`y1 zf@wS&h!^CYYLV0J?X7%eG$Y>5x>~NkW!-x% zlrW6RuS3Lz*2veX3$!mHtD+n2$><&y3-W0_)1A$a4mrnO81+kco_Rx#7XHztp*=J` zP(#m>$=dk5mhzbRvle9=&lG)!?%}7EPLRCzG*_A9@5xcxF+iyID(H__|4}y>EwzCwMEN;)%kU~{+RyqBiL`W=TPSJ+U(M5FvP7HLGaEwY1 z%~^VcJKNgmZ7L!y$Ifl9tKd$r_$;xcV|aD753mh*)PX{);t!YtROZ^uOx{@k(qu)L zdIrl&fKmi2^Kg)UFwZi3yN+|1JyemIvmz8uaB2sPjHF>@uLC5a8AX!mu0*!v63m-i zna=D`)OYMoU`X1J2+gHC7~^?Ux54S*#P>Px7x88d%DnJ(-dS&!RabY4GYV@+@~TX# zz4`Ic1wm9qeVa){a}oLE$EvhTZpMhK@diRNc7Sv0+lA z^bB64%rjJ1p7_vSJAGIgVF}kMsmGG~&)@R4~b-DO06!_)M7h1k-*qKW_OW3HC+#iP13GvBidJJP=VaZ8;|5I=gXPT3J9+o?j6nk{5LBm#+hF zl&x}8?$EkIvGiD3>S2{KqS3V|2JNGvJF0Pm-E`j>2OWt52Yh6Jm;AQY^SVJ@&f5qU zs8>R3$CT%&9((?=be!{DjqT$*v9^XZ(}bfq6Nh z4jbEUnt4TE-b$^PcrE;6&R;loVR(|ww2;#xAphRUbk!$Ug}0{Yc*|Sol!B*Iatep~ zq(1LFW!ZHe!{xYJ?OF1%^-uKUVkt%4(Pi{yO{Lo%lLn6?(1V@wgCm@A9$l0Y;6@y)EVEk z{(R#4WqTxP_^#y=O*i$2$hNhIx&_W$mz9$_X^7@&^Q5y5c{)mmGVHmn1*9g$^pwrM zj~Vr=Z+k0|AA%QsS6j4v+{JG`nv7@*tvYU8t@N&vN#V5~yYfy|3ZG7}DN>T<{WJF4 zM%pZaN8|MM)%<0QRNAq(PG39Ev~ig3Y81az+M2m09~9+NgBiEi%33e^_}xZULw@cp z*GRJA^fXCWWVOuCz+B_I?X*WiGQ~N}(jECPIDkI{U%1Tg5Q38wOS2uyv$ad#EE~88 zAIu%sV;-w#x0a8#pKBg5t0CxhTf6L2;Na`v6hDh|e4W1HEy^j;#zY=O(2kPDspnzl zct(en3@h)VU2bQIy>W0(EiwV`Scyuc-Urgf7RbP0^2I%ypdq^T_peV%K)qdA!)O5ehK}g zH0W`>(bvgUmtif{L)?D$)Yx;pm4~bzEf|rTx&k}xi)BHJ3a#WSGE#&IbFx*q!ZMk?evQK#lO{8%jL9z= zaU#}&?^dw+VYV8DglCY8Zi3g`n^R<*pYD%ZWj$c8z{}4?e-oYTBVjyk947h3Ec(SC z*e<7;UVCeMUU(Xx&7JTiL9E?mUhICLfrD{hPA^_Q_0BD^WW4@Hr8)5;{%PftcS;ST z2GjG>97;r?rKQryJ8>P9aSk@HNvrI+;!7$2*BiHTv#TEO{|cXeaBRmoOM< zjV`Obssw|$1cO9>6g}PEw4>hf!i_cZ#dewI6)+0;HfvCBzskvX#c<={e#6cz^zP=t zB?_BmlKG4L^b0d#Ht2>y$?2ApHdpAE%roozzeXpW)l?jml4i49d&tT%JGrA!uWkvQ zo->jptz!EV9r~VdA2(j4Br|yM)P|A)Zl8tp*8_JSn;80S5gpk=WNxacBp*jU<*s74 zO792}_!&kDGk=jT7xnU7Q`V%==UZ>7N3RgMemxO0dV=Mb_2ND>Nty9CZi$c%-bm0i zu@L#RxM4>?2%H_NSAN!VT^~%_GPzi0q_$G-6MlI|abT#9@kYDmxQaU$QRb4^wUGb? z7Oa@e#pkiBGvA1^X8m?O&!^Q|4TL`7$KLBz_}z^t@wN&bjqi>tzn#;dC^FsmgquVC zBHtycb;hiL!SwV4Z`&s`I94AUbq9mT*>sj48RxE?@m`6RqHK$cRy2MvCau%CNQ=y= zNfdlv@F^vW-QxJ9?5VRg$>Pwum7&mF^pcDX>1QnL2|MKnJ|BpT`zDtzq3-$W1b0O9 zOn~E^V_{lWa0?r&OghOZH+I;^g2&*tq=XwX7dlObGGEA;W_(Ce{)Zgm!H3H{*gFk|zGN;HEo5Lg5w=&Dr{~{NF2rVq2F0{J+;9o=4{E!r88{e*mIq_gZezK&maQVc?Yn@MANz(w%di!H$&N`BQd3V;o{9a4Gr+Ua` zTals1D7%Gj`7bLIA0R>Ee-aX|6qDRpURv9B(o_um#ja4>Iaw=Fe|mYl1fD5@@81EV z@8*ZsJy`$bY_h8kHNE{b&=YF4Q^f}#;&O9(^o)KqneZg1@ET{YreTk4C^UhO6oX^- zV+QPB&yP+i?OUijn*Zy&HN&{=%-Q9}wR~qDi)Y6PvNZVx~53C2ZQTDiP&V5ot;l61M*rhPzby5c!*rab$;RJon@dn2v%*vCI^h3I{AzGKVY zcB@j@il;>*V$*H;bE#v=1((2iW}%=uMB=ol-*;2o!>4pded4(-G<>Rz)BSPTyT1tO zQJYV$gyG>tR+LPYzFs`T{W zU*uIHYr*e=nxy)T1YK9>um@quM|#9kiS@04L|(9N*!hyG|643U5-kD_5~ua}C(eCF{^+8WF5(7IXy_v_PRU%DxSu=#qz@aRMtdWV{lQEijg^bX~!{&nOL;nfwx34 zZm#QDU(a2wEE-b`_FaFyZF*pxY;N)fQxKM_(O42~b<}xoCGO-YtbjW2tZ@f)$%#4} zrHgwfwxAW!mXTDLu@7O89rKc>b?1{`rS?k2Q|sAfJkD(G*f=pkjob>78{kOgzp&~p zi1$l(TU5TmenQ;%?Z{Md)n#6%=CNwiP>xvN&M>TIADa^uRX`n>oYxg42Xk2P4p;nk zI2mRmEi;$8F_bexc(TzLv2&O3*YC3m+h1*&<#{8OqH*^VOHrpx-fygU59NH*bU08Q z)@_OTr2g`QulSjm&Xlqw8x1#X)r$E-9g2z8+oBOPK#tIke zma@%`Zyo70_;Qc-%1op1MK1L~d5z%tU10lT_I6q(=+6$FMk*q`XuN32`6qy$+p5)7 zXRklh7#&59jCeevEhGKHBJL-8IxFHph>BRGaWeQ{q`4_7TM{# zLG)h2h>9`^kKX9aPu-)LeO5l+tw6-{8IBO+)xV&q+^w^3QTw;yhkW|fj=@gE0J$AK zDMChy?K6D1`I!FzAwUYTmOG?5KA*z10g>)EEF`RX!%6+`WvHX`XCfIvSb)kdIgoqR zr+j|yG4pzMS^z=i!lE=@y$7u_NL|2?u=5v{^c5fh0cLETT(OogHVgYvoTwK*|Bg`N04`jbEaR8i(g!*)4yz!eGIcDq;< zfcC~2=}{hX9$-R)@_PQz!h{5Ixm?@h=TEvi4YepxfU_Kv)v-*O0-$9d zI&!@Aq>J~+vN-<$famVeA;fvRLC8$!Z%qAZ%=kW9fxGltZt~=a&&oQzBQ#JiKX{%L za>kGmfgPbTIXfSz$MG5pG~_g+5rguke^W}483}uieH0!S{{XK@k~5zxCxMOrqL>pq zoa|CFj=q$*jx}OW>`YKm`4T0mpsjDRvtG;0on69Y}gnnohI;oYQeqQ)z{O0gk-U zNlV9i2`yTW-ST_Yj`c++ky8MV%8#^6NCf^uwpAjLEf@MyaopB+TRgiQ`_p>xO%AAX zmy1K!%s_s$({pS;<)(gus1U#1rVL`I+j$K{x^E#E;m^=hTJxsZ`uduyO*EZJ70QcE zc{T`CLHg4^)p3sBfT%~UB`;|pvrAanOHsPyx)No)fVC^*!8=k~IZ~Zo-%y-yU8<=kNajK}zz&0u24*_gAYm065|$ zX{dLT_Rs|(04Sbg`aeXwsF~L0lQj!?gS@c-2HtAwK&O!^3Vdq@>*}0 z@)D_lz2Eu@Mk#I-13_q&N?sfr9XQ}PTj#jy`Hqh9&mB{ zq6s7D7Mz=649s#*R_CX&HC@hr>|?DU5;u+j%PV1*qjfGRzEjNmrx;Ljk>~X^({Cew z{zlz0a=n#(s#TZm2pI;{=W#!H(-`9;7BR+o92frWFYe)9N&aQ28In9Iu2_x~e>3Sq zDNmk9%Xd8hqy!8ZT*^nt#C(IG_o>Uf9kG+{*!=||{rD-!h@MY&sDzCHYh_LDKh>^# zdYS-{q>9}>W7mK>vlC4bNh7S2j-PTca;r{?B81H&hL;?_VeBY7r5)8jBH#UL1|;9V zQX(gC=gj_;vB?mH8=*XH>e;1d358Y5;~4Bc%|OVozn;ga!#n1{Pi7IY0CD^AS5KooPFNsJ!wlUVNq9~;Ze;rOOdq)&(XixG`L8H z<|qB8^`Hd_f?b;}>*-bBaB|q&1MvLR!3>x#qz~@qn=HA^aRANHo2Xi72fV^PvBtZc z{nZD6Jxw+^_J)#2%b&c*`3i?bV2ee+9`_$P~ zw!s?w>-T$O@}(}sl#G1C_`3>vAYPr%T++A=goi;U?6K-y^bqqf$0_ISrxtI6~{vwu_wQ{3T zMsdv?(q|MrQ!a-dtcaj=$Ystu(oq z0~y+c{qN{0$7BE~9G>2_u_A>?w>de_-eca6np5*G)a<>_xug-7B1s4*IRmnv#-cLI zIV*1aRDJ1xqR<4AOSOzK0Mh>ey|^rd6C#|KY7hJ z=alo6jP~eGXjEwq=NyiMu&A0>oa}|LnE9l~=(GVWlWbuOOS)Wi&&rMvDPym1+Ea&F##(*T3AmvljKYE+6oIJg{E_f9aNb?gNxjR3KZ|EojSuP4~ zh80(r)3SS=YO@j3oLQmBdqRZ-OO{pK{GOC8b?p3B%!0%4_Yc!=~J&(@@A zHn2op%zq(Kmoj{)eqQfNHbgleOm#E>@Dd>MGk?6sfF4jc0;$=3e=2G#H_Z6m{ocz_ zJdZwOfbCD>m-;OMaJ!JlATTEBlwtAFMN1TM#HK*|nZEO$^yTvHkSZ?+wsOpBv~l@U zks!*Sx&76kZ&Xihe?7qI{m88e+;u$}p=9*pD?N7Vizo4bc#GnE69;SjtF{a1f zbDpHsQ5KlAa*w!v@AtjUJr&sQl#Sg$9TZi0UFY1^#EpQ1ApRlfw7{NAgTKjvL&@C# z0166JjUWu{-!c2nc_xxJiZ}<9I6V{|N%y4+cNdcdyAGS`NxaOEdI zIsvqk{3evh_a&oI2qzO(R$DqgCvYIj!#7u1Cw?F#>HUn-5HO!pr8h; zxqq_6{WJT+&<{aVqD2B=cRy0cu4%HQVIz((H!mm!5VrL)$VTu8Zrf;JJyD$Hz|UdV z6f+hjQ1RWf(weN(kCc^<@-0p*s4$2#*>gx_QsM>@1^HZI$Eo$H)eD`@N4Go*YA6|b z7=N@+Kq{1E%EA-5U^y$!3yK6-GQ8(xClTijC$F;8kCy_31Cn@A&S}m<1w~(=905wG z7cw(*j!B>fNfSsi&GWA-?M)LI)8z#}y-o$C`HGcH_u!grgUWFr`@I^NiPQivDgB4F zFc5kkDRW2#AP`jaHCi3flM|fv+I>Y>%|$eO&|~kfDtb~8H5C+Z<{&4A?zJXG04{2~ z;we1A_gMVZV~T0y5!#p;U1${0c&Aq>sBzYinp~PF0Wsc;^GB^EAOI<8Fgglc(->0H zW|yrX4ASvPF+~72lN9Xw(ozAqIij6KFcTEJXrh1)gQXay`qE~A1J;2>E=4dBmWL&jXaRcBNkF6m(o*-M6u?T1ig_c_kkbngW`o+C!kN_5 zOqPollDd|JW1qY2R`8I5@;`5x&1DhBLtu)#0-K;FmQC!30WpOh^}JsNQlaxnaKSGNtA_pb^U7Cg+){axpCT{Kjt6C?mo7?1-&g*Ef@6ho z{{Yu4X#nL-xsbObs~T=zQ=DQx!~4{Vj^}jUkIKD;214YlFO}~8p2C16X4(6+P+uGl z!hjYfX(Vny`I?x|4Y~qz&q39g)M*pSR$0j4{IT|00C(?hg6_3U>Lg7h{HTj2b zfPF}$GBk`*Gsk!I_7v~k#F!uASkMB1s5i*NcHUZmOqs|bJqW=x)Kefwl=SGHl;Y*d zSormRzkr|zG=V@=T(&qJht`v7L_FCW9DL3F1u@<`c+{~xo)iqT8eoa#b(Y|NyBItz zGy>tSLC#VP@V~_W0AE2<85IJ=i}Qi^K;cC--+Pr-`n@h=iBG?7tki%|ih#Q}&E2W8 zskugtl&pQdO)7?PrN_SCN(_aFSkFD$m~6%*#Df@I%A6JK2dztmj5LxyIQg2Z&QjDQ z%b|U=4pzJA)A!1fD$m-bX z>^*5oNK=#4{Yx5Tk)kcMjLhFGnfZ@nQ((*YmkH^fwHb@e;$S)Gx%;M=lStser)-LF zU(|Yv0I>29c18hl+tQIlaU;nioc{n5ALJ>Sj@~Su=ciV3X^RufBFQ)zA9g;fv;fDB zTeaTGQ3f_AcmDu-tO?Q72vl#!Okq-hOE%cf0Q=5+eJUr}YWuaftZG z-)waD6(REBjDDTTpaDd2Zgx2JV^BJh;#N_x@X7s6N~%c?{G4z*3O8>h7w+TcZ|Eri z?Z+Wv8P9&oC_Y>$&m&-WJ{hRz$iW|S$Ahky7A)NG|C z7aM+K!whs4WDt5%Yz3v@f(hW#QR*nT5Juixn2%1VO;4JRSiHpRf;t*Vq%JuaalsS_ zmX{)ulQal|P*MEFAMXmEAmiSTtyYYPTt$zNpO%;wxTB%sl8P(_O%#;9xUN%B>p|pE zpIT060dYoXpyP@|4wRXrG?ZKg%`GN5>q=<=zO+(NK*gk>{b?u=y(zSHqon{lG?~RA z?L`0_b)_8AQA`D;riuqN0P0F8_=tvZkk zNx`Cu1|g&v>r2fhC=k{e6%nbbCKX6bXB3LUH_lGa;sS%#lNrriU7g8j)sfK(q+@dx z%7N+XX{a`nBfjUx3lYHf6;{qS+L^nQ_<4KY?l{kVS~2KxN0ugSWY;o>yjMx8#l)`zQFCdMsAxdFpv?tj2+h z8VK_wt(h^)p5DTpmYa@|_v7YjX2)_F#s^hHPiY;95s#_#?TSJjy%dPh4d2}Zr3$LM znnRX9#nTjn%ZWMl^~)Lpw1+Yem-tiqnqUN(4;c}U&8c2wh1Mw4Jh|Zq-5%^}DJ5rP z6~8C=r2ZBE025D)M*w%-zUO{R)~9q#>jqFYu@J zH0O|?k|HzRy(kdoaJW?&e#$#gfP!8|`MbBJ3$`KGuT$!3Fd5i8_UM!#B*~O;cBX!t zg%Zo;vc!NiqoPe_l;TJBZpd8t#~MjCCX4hn1OxR_880 z^W!R%v7$h%NhF`V{{Y0sn1TrRFWMw+&;9;^ML#}pz~V1n?^X7dmkz(VkmXZ74O(V9 znNu5vH-EF501GMwRUGzTN(5sJWqwHH_7s6*i5ZK1N#``1Oodt0h3vo7(is{PCSlGH zbU)t}B(p3fQZ)@JA1V&s=ApP^=gWX@l{qij1wIiPN9FS^rcw$&M7$v%{ZM=A0hWQ>k@WCs}csZlYR8M06D zdr^qdA9)*3Q|nMf8+Vr=`A5uy+K|yN%^~37KUSoYV4u5-bP^1A?0pR@ zfh{(nfMF%0G$sJ<0hHtsMOIPdFpMAFx83$NXX`+P zrpSUoRQ~|_u}-Av_|rf|6R{gu{Ok9sQhjO(K?P)9tJj{QqkEySDuCJVnwd(<<4WiM E*$?dDlmGw# literal 0 HcmV?d00001 diff --git a/public/40684029_340720676473669_8185729820999548928_n.jpg b/public/40684029_340720676473669_8185729820999548928_n.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09de173e9c60535c567e972d9f5180ac785e8b9a GIT binary patch literal 24111 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 b65`I>bas}RzK;1N Date: Fri, 7 Sep 2018 17:37:20 +0200 Subject: [PATCH 02/55] Corrections ortho --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 82e0475..4ebb748 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Le menu contient 2 éléments : * Plan * Végétaux -Le plan renvoit sur la page plan. +Le plan renvoie sur la page plan. Végétaux contient un sous menu listant les différents types de végétaux. @@ -38,7 +38,7 @@ Le site contient 3 types de pages : Le module de recherche permet de faire une recherche AJAX avec auto complétion. -Le fait de cliquer sur un résultat de la recherche renvoit sur le plan du lycée. +Le fait de cliquer sur un résultat de la recherche renvoie sur le plan du lycée. Sur le plan des marqueurs sont placés aux endroits ou se trouve le végétal recherché. From a8dc7f83232ce9f2759a09ed9af9b45e2464f06f Mon Sep 17 00:00:00 2001 From: dbroqua Date: Fri, 7 Sep 2018 21:14:05 +0200 Subject: [PATCH 03/55] Setting up project --- .eslintrc.js | 3 + .gitignore | 1 + README.md | 4 + app.js | 36 + bin/www | 59 + config/config.json | 23 + migrations/20180907180037-create-users.js | 35 + .../20180907185114-create-vegetables-types.js | 26 + .../20180907185312-create-vegetables.js | 42 + ...180907185320-create-vegetables_pictures.js | 33 + models/index.js | 35 + models/users.js | 11 + models/vegetables.js | 25 + models/vegetables_pictures.js | 15 + models/vegetables_types.js | 12 + package-lock.json | 5625 +++++++++++++++++ package.json | 28 + public/stylesheets/style.css | 8 + routes/index.js | 8 + routes/users.js | 8 + views/error.pug | 6 + views/index.pug | 5 + views/layout.pug | 7 + 23 files changed, 6055 insertions(+) create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 app.js create mode 100755 bin/www create mode 100644 config/config.json create mode 100644 migrations/20180907180037-create-users.js create mode 100644 migrations/20180907185114-create-vegetables-types.js create mode 100644 migrations/20180907185312-create-vegetables.js create mode 100644 migrations/20180907185320-create-vegetables_pictures.js create mode 100644 models/index.js create mode 100644 models/users.js create mode 100644 models/vegetables.js create mode 100644 models/vegetables_pictures.js create mode 100644 models/vegetables_types.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/stylesheets/style.css create mode 100644 routes/index.js create mode 100644 routes/users.js create mode 100644 views/error.pug create mode 100644 views/index.pug create mode 100644 views/layout.pug diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..a5b82de --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,3 @@ +module.exports = { + "extends": "standard" +}; \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..07e6e47 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/node_modules diff --git a/README.md b/README.md index 4ebb748..502d1db 100644 --- a/README.md +++ b/README.md @@ -70,3 +70,7 @@ L'entité "Végétaux" contient : * Une ou plusieurs photos secondaires (?) * Une description * Une position sur la carte + +``` +DEBUG=cfa-nimes:* npm start +``` diff --git a/app.js b/app.js new file mode 100644 index 0000000..d4a5d5e --- /dev/null +++ b/app.js @@ -0,0 +1,36 @@ +const createError = require('http-errors') +const express = require('express') +const path = require('path') +const cookieParser = require('cookie-parser') +const logger = require('morgan') + +const indexRouter = require('./routes/index') +const usersRouter = require('./routes/users') + +const app = express() + +app.set('views', path.join(__dirname, 'views')) +app.set('view engine', 'pug') + +app.use(logger('dev')) +app.use(express.json()) +app.use(express.urlencoded({ extended: false })) +app.use(cookieParser()) +app.use(express.static(path.join(__dirname, 'public'))) + +app.use('/', indexRouter) +app.use('/users', usersRouter) + +app.use(function (req, res, next) { + next(createError(404)) +}) + +app.use(function (err, req, res, next) { + res.locals.message = err.message + res.locals.error = req.app.get('env') === 'development' ? err : {} + + res.status(err.status || 500) + res.render('error') +}) + +module.exports = app diff --git a/bin/www b/bin/www new file mode 100755 index 0000000..f37503d --- /dev/null +++ b/bin/www @@ -0,0 +1,59 @@ +#!/usr/bin/env node + +var app = require('../app') +var debug = require('debug')('cfa-nimes:server') +var http = require('http') + +var port = normalizePort(process.env.PORT || '3000') +app.set('port', port) + +var server = http.createServer(app) + +server.listen(port) +server.on('error', onError) +server.on('listening', onListening) + +function normalizePort (val) { + var port = parseInt(val, 10) + + if (isNaN(port)) { + // named pipe + return val + } + + if (port >= 0) { + // port number + return port + } + + return false +} + +function onError (error) { + if (error.syscall !== 'listen') { + throw error + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port + + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges') + process.exit(1) + case 'EADDRINUSE': + console.error(bind + ' is already in use') + process.exit(1) + default: + throw error + } +} + +function onListening () { + var addr = server.address() + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port + debug('Listening on ' + bind) +} diff --git a/config/config.json b/config/config.json new file mode 100644 index 0000000..5a6fb17 --- /dev/null +++ b/config/config.json @@ -0,0 +1,23 @@ +{ + "development": { + "username": "cfanimes", + "password": "kojee9Mo", + "database": "cfa_nimes", + "host": "cfanimes.c6flpj4u5fit.eu-west-3.rds.amazonaws.com", + "dialect": "mysql" + }, + "test": { + "username": "root", + "password": null, + "database": "database_test", + "host": "127.0.0.1", + "dialect": "mysql" + }, + "production": { + "username": "root", + "password": null, + "database": "database_production", + "host": "127.0.0.1", + "dialect": "mysql" + } +} diff --git a/migrations/20180907180037-create-users.js b/migrations/20180907180037-create-users.js new file mode 100644 index 0000000..f049ea2 --- /dev/null +++ b/migrations/20180907180037-create-users.js @@ -0,0 +1,35 @@ +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.createTable('Users', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + firstName: { + type: Sequelize.STRING + }, + lastName: { + type: Sequelize.STRING + }, + email: { + type: Sequelize.STRING + }, + password: { + type: Sequelize.STRING + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }) + }, + down: (queryInterface, Sequelize) => { + return queryInterface.dropTable('Users') + } +} diff --git a/migrations/20180907185114-create-vegetables-types.js b/migrations/20180907185114-create-vegetables-types.js new file mode 100644 index 0000000..23dcb16 --- /dev/null +++ b/migrations/20180907185114-create-vegetables-types.js @@ -0,0 +1,26 @@ +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.createTable('vegetableTypes', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + name: { + type: Sequelize.STRING + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }) + }, + down: (queryInterface, Sequelize) => { + return queryInterface.dropTable('vegetableTypes') + } +} diff --git a/migrations/20180907185312-create-vegetables.js b/migrations/20180907185312-create-vegetables.js new file mode 100644 index 0000000..9681a1a --- /dev/null +++ b/migrations/20180907185312-create-vegetables.js @@ -0,0 +1,42 @@ +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.createTable('vegetables', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + name: { + type: Sequelize.STRING + }, + mainPicture: { + type: Sequelize.STRING + }, + description: { + type: Sequelize.TEXT + }, + lat: { + type: Sequelize.INTEGER + }, + lng: { + type: Sequelize.INTEGER + }, + vegetableTypes_id: { + type: Sequelize.INTEGER, + references: { model: 'vegetableTypes', key: 'id' } + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }) + }, + down: (queryInterface, Sequelize) => { + return queryInterface.dropTable('vegetables') + } +} diff --git a/migrations/20180907185320-create-vegetables_pictures.js b/migrations/20180907185320-create-vegetables_pictures.js new file mode 100644 index 0000000..658d373 --- /dev/null +++ b/migrations/20180907185320-create-vegetables_pictures.js @@ -0,0 +1,33 @@ +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.createTable('vegetablePictures', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + url: { + type: Sequelize.STRING + }, + order: { + type: Sequelize.INTEGER + }, + vegetables_id: { + type: Sequelize.INTEGER, + references: { model: 'vegetables', key: 'id' } + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }) + }, + down: (queryInterface, Sequelize) => { + return queryInterface.dropTable('vegetablePictures') + } +} diff --git a/models/index.js b/models/index.js new file mode 100644 index 0000000..42ce103 --- /dev/null +++ b/models/index.js @@ -0,0 +1,35 @@ +const fs = require('fs') +const path = require('path') +const Sequelize = require('sequelize') +const basename = path.basename(__filename) +const env = process.env.NODE_ENV || 'development' +const config = require(path.join(__dirname, '/../config/config.json'))[env] +const db = {} + +let sequelize +if (config.use_env_variable) { + sequelize = new Sequelize(process.env[config.use_env_variable], config) +} else { + sequelize = new Sequelize(config.database, config.username, config.password, config) +} + +fs + .readdirSync(__dirname) + .filter(file => { + return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js') + }) + .forEach(file => { + const model = sequelize['import'](path.join(__dirname, file)) + db[model.name] = model + }) + +Object.keys(db).forEach(modelName => { + if (db[modelName].associate) { + db[modelName].associate(db) + } +}) + +db.sequelize = sequelize +db.Sequelize = Sequelize + +module.exports = db diff --git a/models/users.js b/models/users.js new file mode 100644 index 0000000..c5b4b25 --- /dev/null +++ b/models/users.js @@ -0,0 +1,11 @@ +module.exports = (sequelize, DataTypes) => { + const Users = sequelize.define('Users', { + firstName: DataTypes.STRING, + lastName: DataTypes.STRING, + email: DataTypes.STRING, + password: DataTypes.STRING + }, {}) + Users.associate = function (models) { + } + return Users +} diff --git a/models/vegetables.js b/models/vegetables.js new file mode 100644 index 0000000..867211d --- /dev/null +++ b/models/vegetables.js @@ -0,0 +1,25 @@ +module.exports = (sequelize, DataTypes) => { + const vegetables = sequelize.define('vegetables', { + name: DataTypes.STRING, + mainPicture: DataTypes.STRING, + description: DataTypes.TEXT, + lat: DataTypes.INTEGER, + lng: DataTypes.INTEGER, + vegetableTypes_id: { + type: DataTypes.INTEGER, + references: 'vegetableTypes', + referencesKey: 'id' + } + }, {}) + vegetables.associate = function (models) { + vegetables.hasOne(models.vegetableTypes, { + as: 'VegetableTypes', + foreignKey: 'vegetableTypes_id' + }) + vegetables.hasMany(models.vegetablePictures, { + as: 'Pictures', + onDelete: 'cascade' + }) + } + return vegetables +} diff --git a/models/vegetables_pictures.js b/models/vegetables_pictures.js new file mode 100644 index 0000000..fb2b8f1 --- /dev/null +++ b/models/vegetables_pictures.js @@ -0,0 +1,15 @@ +module.exports = (sequelize, DataTypes) => { + const vegetablePictures = sequelize.define('vegetablePictures', { + url: DataTypes.STRING, + order: DataTypes.INTEGER, + vegetables_id: { + type: DataTypes.INTEGER, + references: 'vegetables', + referencesKey: 'id' + } + }, {}) + vegetablePictures.associate = function (models) { + vegetablePictures.hasOne(models.vegetables, { as: 'Vegetables', foreignKey: 'vegetables_id' }) + } + return vegetablePictures +} diff --git a/models/vegetables_types.js b/models/vegetables_types.js new file mode 100644 index 0000000..77c8449 --- /dev/null +++ b/models/vegetables_types.js @@ -0,0 +1,12 @@ +module.exports = (sequelize, DataTypes) => { + const vegetableTypes = sequelize.define('vegetableTypes', { + name: DataTypes.STRING + }, {}) + vegetableTypes.associate = function (models) { + vegetableTypes.hasMany(models.vegetables, { + as: 'Vegetables', + onDelete: 'cascade' + }) + } + return vegetableTypes +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..85ef318 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5625 @@ +{ + "name": "cfa-nimes", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@types/babel-types": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.4.tgz", + "integrity": "sha512-WiZhq3SVJHFRgRYLXvpf65XnV6ipVHhnNaNvE8yCimejrGglkg38kEj0JcizqwSHxmPSjcTlig/6JouxLGEhGw==" + }, + "@types/babylon": { + "version": "6.16.3", + "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.3.tgz", + "integrity": "sha512-lyJ8sW1PbY3uwuvpOBZ9zMYKshMnQpXmeDHh8dj9j2nJm/xrW0FgB5gLSYOArj5X0IfaXnmhFoJnhS4KbqIMug==", + "requires": { + "@types/babel-types": "*" + } + }, + "@types/geojson": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", + "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==" + }, + "@types/node": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.9.4.tgz", + "integrity": "sha512-fCHV45gS+m3hH17zgkgADUSi2RR1Vht6wOZ0jyHP8rjiQra9f+mIcgwPQHllmDocYOstIEbKlxbFDYlgrTPYqw==" + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" + }, + "acorn-globals": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", + "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", + "requires": { + "acorn": "^4.0.4" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + } + } + }, + "acorn-jsx": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz", + "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==", + "dev": true, + "requires": { + "acorn": "^5.0.3" + }, + "dependencies": { + "acorn": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.2.tgz", + "integrity": "sha512-cJrKCNcr2kv8dlDnbw+JPUGjHZzo4myaxOLmpOX8a+rgX94YeTcTMv/LFJUSByRpc+i4GgVnnhLxvMu/2Y+rqw==", + "dev": true + } + } + }, + "ajv": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", + "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "requires": { + "ansi-wrap": "^0.1.0" + } + }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true + }, + "ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "dev": true, + "requires": { + "buffer-equal": "^1.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "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-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "dev": true, + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "dev": true, + "requires": { + "make-iterator": "^1.0.0" + } + }, + "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-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "dev": true, + "requires": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dev": true, + "requires": { + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true + }, + "array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "dev": true, + "requires": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "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 + } + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async-done": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.1.tgz", + "integrity": "sha512-R1BaUeJ4PMoLNJuk+0tLJgjmEqVsdN118+Z8O+alhnQDQgy0kmD5Mqi0DNEmMx2LM0Ed5yekKu+ZXYvIHceicg==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^1.0.7", + "stream-exhaust": "^1.0.1" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "dev": true, + "requires": { + "async-done": "^1.2.2" + } + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "dev": true, + "requires": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "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 + } + } + }, + "basic-auth": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", + "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "bluebird": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz", + "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==" + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "http-errors": "~1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "~2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "~1.6.15" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "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" + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "^0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "requires": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + } + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", + "requires": { + "is-regex": "^1.0.3" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-css": { + "version": "3.4.28", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", + "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", + "requires": { + "commander": "2.8.x", + "source-map": "0.4.x" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "cloneable-readable": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", + "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + } + } + }, + "cls-bluebird": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz", + "integrity": "sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4=", + "requires": { + "is-bluebird": "^1.0.2", + "shimmer": "^1.1.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "dev": true, + "requires": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "commander": { + "version": "2.8.1", + "resolved": "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "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 + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "constantinople": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", + "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", + "requires": { + "@types/babel-types": "^7.0.0", + "@types/babylon": "^6.16.2", + "babel-types": "^6.26.0", + "babylon": "^6.18.0" + } + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", + "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6" + } + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-props": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", + "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", + "dev": true, + "requires": { + "each-props": "^1.3.0", + "is-plain-object": "^2.0.1" + } + }, + "core-js": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "^0.10.9" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "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-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "dev": true, + "requires": { + "kind-of": "^5.0.2" + }, + "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 + } + } + }, + "default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "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 + } + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + } + }, + "denque": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.3.0.tgz", + "integrity": "sha512-4SRaSj+PqmrS1soW5/Avd7eJIM2JJIqLLmwhRqIGleZM/8KwZq80njbSS2Iqas+6oARkSkLDHEk4mm78q3JlIg==" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" + }, + "dottie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.0.tgz", + "integrity": "sha1-2hkZgci41xPKARXViYzzl8Lw3dA=" + }, + "duplexify": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es5-ext": { + "version": "0.10.46", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", + "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.5.0.tgz", + "integrity": "sha512-m+az4vYehIJgl1Z0gb25KnFXeqQRdNreYsei1jdvkd9bB+UNQD3fsuiC2AWSQ56P+/t++kFSINZXFbfai+krOw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.5.3", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "imurmurhash": "^0.1.4", + "inquirer": "^6.1.0", + "is-resolvable": "^1.1.0", + "js-yaml": "^3.12.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^2.0.0", + "require-uncached": "^1.0.3", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^4.0.3", + "text-table": "^0.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "eslint-config-standard": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz", + "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + } + }, + "eslint-module-utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", + "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", + "dev": true, + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^1.0.0" + } + }, + "eslint-plugin-es": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.3.1.tgz", + "integrity": "sha512-9XcVyZiQRVeFjqHw8qHNDAZcQLqaHlOGGpeYqzYh8S4JYCWTCO3yzyen8yVmA5PratfzTRWDwCOFphtDEG+w/w==", + "dev": true, + "requires": { + "eslint-utils": "^1.3.0", + "regexpp": "^2.0.0" + } + }, + "eslint-plugin-import": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", + "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", + "dev": true, + "requires": { + "contains-path": "^0.1.0", + "debug": "^2.6.8", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.2.0", + "has": "^1.0.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0", + "resolve": "^1.6.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "eslint-plugin-node": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz", + "integrity": "sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==", + "dev": true, + "requires": { + "eslint-plugin-es": "^1.3.1", + "eslint-utils": "^1.3.1", + "ignore": "^4.0.2", + "minimatch": "^3.0.4", + "resolve": "^1.8.1", + "semver": "^5.5.0" + } + }, + "eslint-plugin-promise": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz", + "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==", + "dev": true + }, + "eslint-plugin-standard": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz", + "integrity": "sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==", + "dev": true + }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-4.0.0.tgz", + "integrity": "sha512-kapdTCt1bjmspxStVKX6huolXVV5ZfyZguY1lcfhVVZstce3bqxH9mcLzNn3/mlgW6wQ732+0fuG9v7h0ZQoKg==", + "dev": true, + "requires": { + "acorn": "^5.6.0", + "acorn-jsx": "^4.1.1" + }, + "dependencies": { + "acorn": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.2.tgz", + "integrity": "sha512-cJrKCNcr2kv8dlDnbw+JPUGjHZzo4myaxOLmpOX8a+rgX94YeTcTMv/LFJUSByRpc+i4GgVnnhLxvMu/2Y+rqw==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "express": { + "version": "4.16.3", + "resolved": "http://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.3", + "qs": "6.5.1", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "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" + } + }, + "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 + } + } + }, + "fancy-log": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", + "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", + "dev": true, + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "time-stamp": "^1.0.0" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "fined": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", + "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "flagged-respawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz", + "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=", + "dev": true + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" + } + }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "^2.1.0" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "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 + }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "requires": { + "is-property": "^1.0.2" + } + }, + "generic-pool": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.4.2.tgz", + "integrity": "sha512-H7cUpwCQSiJmAHM4c/aFu6fUfrhWXW1ncyh8ftxEPMu6AiYkHw9K8br720TGPZJbk5eOH2bynjZD1yPvdDAmag==" + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-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==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + } + }, + "glob-watcher": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.1.tgz", + "integrity": "sha512-fK92r2COMC199WCyGUblrZKhjra3cyVMDiypDdqg1vsSDmexnbYivK1kNR4QItiNXLKmGlqan469ks67RtNa2g==", + "dev": true, + "requires": { + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "just-debounce": "^1.0.0", + "object.defaults": "^1.1.0" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz", + "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "glogg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", + "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", + "dev": true, + "requires": { + "sparkles": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "gulp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.0.tgz", + "integrity": "sha1-lXZsYB2t5Kd+0+eyttwDiBtZY2Y=", + "dev": true, + "requires": { + "glob-watcher": "^5.0.0", + "gulp-cli": "^2.0.0", + "undertaker": "^1.0.0", + "vinyl-fs": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "gulp-cli": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.0.1.tgz", + "integrity": "sha512-RxujJJdN8/O6IW2nPugl7YazhmrIEjmiVfPKrWt68r71UCaLKS71Hp0gpKT+F6qOUFtr7KqtifDKaAJPRVvMYQ==", + "dev": true, + "requires": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.1.0", + "isobject": "^3.0.1", + "liftoff": "^2.5.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.0.1", + "yargs": "^7.1.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" + } + } + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "requires": { + "glogg": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-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" + } + } + } + }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflection": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", + "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inquirer": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", + "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.0", + "figures": "^2.0.0", + "lodash": "^4.17.10", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.1.0", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-bluebird": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz", + "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "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-expression": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", + "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", + "requires": { + "acorn": "~4.0.2", + "object-assign": "^4.0.1" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "dev": true + }, + "is-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" + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "^1.0.1" + } + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "dev": true + }, + "is-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", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", + "requires": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "just-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", + "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + }, + "last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "dev": true, + "requires": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "dev": true, + "requires": { + "flush-write-stream": "^1.0.2" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "liftoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", + "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "findup-sync": "^2.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + }, + "dependencies": { + "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 + } + } + }, + "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" + } + }, + "matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "dev": true, + "requires": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", + "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==" + }, + "mime-types": { + "version": "2.1.20", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", + "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", + "requires": { + "mime-db": "~1.36.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "moment": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", + "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" + }, + "moment-timezone": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.21.tgz", + "integrity": "sha512-j96bAh4otsgj3lKydm3K7kdtA3iKf2m6MY2iSYCzCm5a1zmHo1g+aK3068dDEeocLZQIS9kU8bsdQHLqEvgW0A==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "morgan": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", + "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", + "requires": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.1", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "mysql2": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.6.1.tgz", + "integrity": "sha512-BNrJH5HavPqskXEy8oVz7ucRbkhegKQ7VD8rNGFwvTuk0WiUSi1wXFOg67NjCGquZnim8nKgHdDiih6LqG5knA==", + "requires": { + "cardinal": "2.1.1", + "denque": "1.3.0", + "generate-function": "^2.0.0", + "iconv-lite": "^0.4.18", + "long": "^4.0.0", + "lru-cache": "4.1.1", + "named-placeholders": "1.1.1", + "object-assign": "^4.1.1", + "seq-queue": "0.0.5", + "sqlstring": "2.3.1" + } + }, + "named-placeholders": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.1.tgz", + "integrity": "sha1-O3oNJiA910s6nfTJz7gnsvuQfmQ=", + "requires": { + "lru-cache": "2.5.0" + }, + "dependencies": { + "lru-cache": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz", + "integrity": "sha1-2COIrpyWC+y+oMc7uet5tsbOmus=" + } + } + }, + "nan": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz", + "integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw==", + "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" + }, + "dependencies": { + "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 + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "now-and-later": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz", + "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", + "dev": true, + "requires": { + "once": "^1.3.2" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "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" + } + } + } + }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "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" + } + }, + "object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "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 + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.8.0" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "pug": { + "version": "2.0.0-beta11", + "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.0-beta11.tgz", + "integrity": "sha1-Favmr1AEx+LPRhPksnRlyVRrXwE=", + "requires": { + "pug-code-gen": "^1.1.1", + "pug-filters": "^2.1.1", + "pug-lexer": "^3.0.0", + "pug-linker": "^2.0.2", + "pug-load": "^2.0.5", + "pug-parser": "^2.0.2", + "pug-runtime": "^2.0.3", + "pug-strip-comments": "^1.0.2" + } + }, + "pug-attrs": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.3.tgz", + "integrity": "sha1-owlflw5kFR972tlX7vVftdeQXRU=", + "requires": { + "constantinople": "^3.0.1", + "js-stringify": "^1.0.1", + "pug-runtime": "^2.0.4" + } + }, + "pug-code-gen": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-1.1.1.tgz", + "integrity": "sha1-HPcnRO8qA56uajNAyqoRBYcSWOg=", + "requires": { + "constantinople": "^3.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.1", + "pug-attrs": "^2.0.2", + "pug-error": "^1.3.2", + "pug-runtime": "^2.0.3", + "void-elements": "^2.0.1", + "with": "^5.0.0" + } + }, + "pug-error": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.2.tgz", + "integrity": "sha1-U659nSm7A89WRJOgJhCfVMR/XyY=" + }, + "pug-filters": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-2.1.5.tgz", + "integrity": "sha512-xkw71KtrC4sxleKiq+cUlQzsiLn8pM5+vCgkChW2E6oNOzaqTSIBKIQ5cl4oheuDzvJYCTSYzRaVinMUrV4YLQ==", + "requires": { + "clean-css": "^3.3.0", + "constantinople": "^3.0.1", + "jstransformer": "1.0.0", + "pug-error": "^1.3.2", + "pug-walk": "^1.1.5", + "resolve": "^1.1.6", + "uglify-js": "^2.6.1" + } + }, + "pug-lexer": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-3.1.0.tgz", + "integrity": "sha1-/QhzdtSmdbT1n4/vQiiDQ06VgaI=", + "requires": { + "character-parser": "^2.1.1", + "is-expression": "^3.0.0", + "pug-error": "^1.3.2" + } + }, + "pug-linker": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-2.0.3.tgz", + "integrity": "sha1-szH/olc33eacEntWwQ/xf652bco=", + "requires": { + "pug-error": "^1.3.2", + "pug-walk": "^1.1.2" + } + }, + "pug-load": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.11.tgz", + "integrity": "sha1-5kjlftET/iwfRdV4WOorrWvAFSc=", + "requires": { + "object-assign": "^4.1.0", + "pug-walk": "^1.1.7" + } + }, + "pug-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-2.0.2.tgz", + "integrity": "sha1-U6aAz9BQOdywwn0CkJS8SnkmibA=", + "requires": { + "pug-error": "^1.3.2", + "token-stream": "0.0.1" + } + }, + "pug-runtime": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.4.tgz", + "integrity": "sha1-4XjhvaaKsujArPybztLFT9iM61g=" + }, + "pug-strip-comments": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.3.tgz", + "integrity": "sha1-8VWVkiBu3G+FMQ2s9K+0igJa9Z8=", + "requires": { + "pug-error": "^1.3.2" + } + }, + "pug-walk": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.7.tgz", + "integrity": "sha1-wA1cUSi6xYBr7BXSt+fNq+QlMfM=" + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + } + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", + "requires": { + "esprima": "~4.0.0" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.0.tgz", + "integrity": "sha512-g2FAVtR8Uh8GO1Nv5wpxW7VFVwHcCEr4wyA8/MHiRkO8uHoR5ntAA8Uq3P1vvMTX/BeQiRVSpDGLd+Wn5HNOTA==", + "dev": true + }, + "remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + } + }, + "remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "dev": true, + "requires": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + } + }, + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "requires": { + "path-parse": "^1.0.5" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "dev": true, + "requires": { + "value-or-function": "^3.0.0" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry-as-promised": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.2.tgz", + "integrity": "sha1-zZdO5P2bX+A8vzGHHuSCIcB3N7c=", + "requires": { + "bluebird": "^3.4.6", + "debug": "^2.6.9" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "requires": { + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.2.tgz", + "integrity": "sha512-hV7criqbR0pe7EeL3O66UYVg92IR0XsA97+9y+BWTePK9SKmEI5Qd3Zj6uPnGkNzXsBywBQWTvujPl+1Kn9Zjw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "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", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==" + }, + "semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "dev": true, + "requires": { + "sver-compat": "^1.5.0" + } + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + } + }, + "seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" + }, + "sequelize": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.38.0.tgz", + "integrity": "sha512-ZCcV2HuzU+03xunWgVeyXnPa/RYY5D2U/WUNpq+xF8VmDTLnSDsHl+pEwmiWrpZD7KdBqDczCeTgjToYyVzYQg==", + "requires": { + "bluebird": "^3.5.0", + "cls-bluebird": "^2.1.0", + "debug": "^3.1.0", + "depd": "^1.1.0", + "dottie": "^2.0.0", + "generic-pool": "^3.4.0", + "inflection": "1.12.0", + "lodash": "^4.17.1", + "moment": "^2.20.0", + "moment-timezone": "^0.5.14", + "retry-as-promised": "^2.3.2", + "semver": "^5.5.0", + "terraformer-wkt-parser": "^1.1.2", + "toposort-class": "^1.0.1", + "uuid": "^3.2.1", + "validator": "^10.4.0", + "wkx": "^0.4.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.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.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shimmer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.0.tgz", + "integrity": "sha512-xTCx2vohXC2EWWDqY/zb4+5Mu28D+HYNSOuFzsyRDRvI/e1ICb69afwaUwfjr+25ZXldbOLyp+iDUZHq8UnTag==" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, + "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" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.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" + } + }, + "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 + } + } + }, + "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" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": ">=0.0.4" + } + }, + "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 + }, + "sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "dev": true + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", + "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==", + "dev": true + }, + "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 + }, + "sqlstring": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "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==" + }, + "stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "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" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "dev": true, + "requires": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "table": { + "version": "4.0.3", + "resolved": "http://registry.npmjs.org/table/-/table-4.0.3.tgz", + "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", + "dev": true, + "requires": { + "ajv": "^6.0.1", + "ajv-keywords": "^3.0.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + } + }, + "terraformer": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.9.tgz", + "integrity": "sha512-YlmQ1fsMWTkKGDGibCRWgmLzrpDRUr63Q025LJ/taYQ6j1Yb8q9McKF7NBi6ACAyUXO6F/bl9w6v4MY307y5Ag==", + "requires": { + "@types/geojson": "^1.0.0" + } + }, + "terraformer-wkt-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.0.tgz", + "integrity": "sha512-QU3iA54St5lF8Za1jg1oj4NYc8sn5tCZ08aNSWDeGzrsaV48eZk1iAVWasxhNspYBoCqdHuoot1pUTUrE1AJ4w==", + "requires": { + "@types/geojson": "^1.0.0", + "terraformer": "~1.0.5" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + } + }, + "through2-filter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", + "dev": true, + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + } + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + }, + "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" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "dev": true, + "requires": { + "through2": "^2.0.3" + } + }, + "token-stream": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", + "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" + }, + "toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "optional": true + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "undertaker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.0.tgz", + "integrity": "sha1-M52kZGJS0ILcN45wgGcpl1DhG0k=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + } + }, + "undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", + "dev": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "unique-stream": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", + "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", + "dev": true, + "requires": { + "json-stable-stringify": "^1.0.0", + "through2-filter": "^2.0.0" + } + }, + "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 + } + } + }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "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", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "v8flags": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.1.tgz", + "integrity": "sha512-iw/1ViSEaff8NJ3HLyEjawk/8hjJib3E7pvG4pddVXfUg1983s3VGsiClDjhK64MQVDGqc1Q8r18S4VKQZS9EQ==", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validator": { + "version": "10.7.1", + "resolved": "https://registry.npmjs.org/validator/-/validator-10.7.1.tgz", + "integrity": "sha512-tbB5JrTczfeHKLw3PnFRzGFlF1xUAwSgXEDb66EuX1ffCirspYpDEZo3Vc9j38gPdL4JKrDc5UPFfgYiw1IWRQ==" + }, + "value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "vinyl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", + "dev": true, + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, + "vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "requires": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + } + }, + "vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "dev": true, + "requires": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + } + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "with": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", + "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", + "requires": { + "acorn": "^3.1.0", + "acorn-globals": "^3.0.0" + } + }, + "wkx": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.5.tgz", + "integrity": "sha512-01dloEcJZAJabLO5XdcRgqdKpmnxS0zIT02LhkdWOZX2Zs2tPM6hlZ4XG9tWaWur1Qd1OO4kJxUbe2+5BofvnA==", + "requires": { + "@types/node": "*" + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "3.10.0", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..2af7945 --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "cfa-nimes", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "node ./bin/www", + "dev": "DEBUG=myapp:* nodemon" + }, + "dependencies": { + "cookie-parser": "~1.4.3", + "debug": "~2.6.9", + "express": "~4.16.0", + "http-errors": "~1.6.2", + "morgan": "~1.9.0", + "mysql2": "^1.6.1", + "pug": "2.0.0-beta11", + "sequelize": "^4.38.0" + }, + "devDependencies": { + "eslint": "^5.5.0", + "eslint-config-standard": "^12.0.0", + "eslint-plugin-import": "^2.14.0", + "eslint-plugin-node": "^7.0.1", + "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-standard": "^4.0.0", + "gulp": "^4.0.0" + } +} diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css new file mode 100644 index 0000000..9453385 --- /dev/null +++ b/public/stylesheets/style.css @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} diff --git a/routes/index.js b/routes/index.js new file mode 100644 index 0000000..8e8ef59 --- /dev/null +++ b/routes/index.js @@ -0,0 +1,8 @@ +const express = require('express') +const router = express.Router() + +router.get('/', function (req, res, next) { + res.render('index', { title: 'Express' }) +}) + +module.exports = router diff --git a/routes/users.js b/routes/users.js new file mode 100644 index 0000000..56b4d36 --- /dev/null +++ b/routes/users.js @@ -0,0 +1,8 @@ +const express = require('express') +const router = express.Router() + +router.get('/', function (req, res, next) { + res.send('respond with a resource') +}) + +module.exports = router diff --git a/views/error.pug b/views/error.pug new file mode 100644 index 0000000..51ec12c --- /dev/null +++ b/views/error.pug @@ -0,0 +1,6 @@ +extends layout + +block content + h1= message + h2= error.status + pre #{error.stack} diff --git a/views/index.pug b/views/index.pug new file mode 100644 index 0000000..3d63b9a --- /dev/null +++ b/views/index.pug @@ -0,0 +1,5 @@ +extends layout + +block content + h1= title + p Welcome to #{title} diff --git a/views/layout.pug b/views/layout.pug new file mode 100644 index 0000000..15af079 --- /dev/null +++ b/views/layout.pug @@ -0,0 +1,7 @@ +doctype html +html + head + title= title + link(rel='stylesheet', href='/stylesheets/style.css') + body + block content From e738d8057917c4c3b81a2f5660abfec5d3aa6ec3 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Sat, 8 Sep 2018 00:00:47 +0200 Subject: [PATCH 04/55] Added routes for Types and Vegetables --- app.js | 21 +- libs/aws.js | 111 + libs/passport.js | 67 + middleware/VegetableTypes.js | 90 + middleware/Vegetables.js | 223 ++ .../20180907185312-create-vegetables.js | 2 +- ...180907185320-create-vegetables_pictures.js | 2 +- models/vegetables.js | 6 +- models/vegetables_pictures.js | 4 +- package-lock.json | 3507 +++++++++++++++-- package.json | 12 +- routes/index.js | 8 - routes/users.js | 8 - routes/vegetableTypes.js | 75 + routes/vegetables.js | 75 + run.sh | 8 + seeders/20180907191459-createUsers.js | 23 + 17 files changed, 3938 insertions(+), 304 deletions(-) create mode 100644 libs/aws.js create mode 100644 libs/passport.js create mode 100644 middleware/VegetableTypes.js create mode 100644 middleware/Vegetables.js delete mode 100644 routes/index.js delete mode 100644 routes/users.js create mode 100644 routes/vegetableTypes.js create mode 100644 routes/vegetables.js create mode 100755 run.sh create mode 100644 seeders/20180907191459-createUsers.js diff --git a/app.js b/app.js index d4a5d5e..2013f2c 100644 --- a/app.js +++ b/app.js @@ -3,12 +3,23 @@ const express = require('express') const path = require('path') const cookieParser = require('cookie-parser') const logger = require('morgan') - -const indexRouter = require('./routes/index') -const usersRouter = require('./routes/users') +const passport = require('passport') +const session = require('express-session') const app = express() +require('./libs/passport')(passport) +app.use(session({ + secret: 'CFA_Nimes', + resave: false, + saveUninitialized: false, + cookie: { + maxAge: 180000 + } +})) +app.use(passport.initialize()) +app.use(passport.session()) + app.set('views', path.join(__dirname, 'views')) app.set('view engine', 'pug') @@ -18,8 +29,8 @@ app.use(express.urlencoded({ extended: false })) app.use(cookieParser()) app.use(express.static(path.join(__dirname, 'public'))) -app.use('/', indexRouter) -app.use('/users', usersRouter) +app.use('/', require('./routes/vegetableTypes')(passport)) +app.use('/', require('./routes/vegetables')(passport)) app.use(function (req, res, next) { next(createError(404)) diff --git a/libs/aws.js b/libs/aws.js new file mode 100644 index 0000000..714f4fd --- /dev/null +++ b/libs/aws.js @@ -0,0 +1,111 @@ +const AWS = require('aws-sdk') +const fs = require('fs') +const path = require('path') +const imagemin = require('imagemin') +const imageminJpegtran = require('imagemin-jpegtran') +const imageminPngquant = require('imagemin-pngquant') + +class Aws { + constructor () { + AWS.config.update({ + accessKeyId: process.env.AWS_ACCESS_KEY_ID, + secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY + }) + } + + _send (params, callback) { + fs.readFile(params.path, (err, data) => { + if (err) { + callback(err, null) + return false + } + const base64data = Buffer.from(data, 'binary') + const dest = path.join(process.env.AWS_BASEFOLDER, params.filename) + const s3 = new AWS.S3() + + s3.putObject({ + Bucket: process.env.AWS_BUCKET, + Key: dest, + Body: base64data, + ACL: 'public-read' + }, (err, res) => { + if (err) { + callback(err, res) + } else { + callback(null, { + file: process.env.AWS_URL + dest + }) + } + }) + }) + } + + _compress (params, callback) { + const newFile = params.path + '.' + params.filename.split('.')[1] + + fs.copyFile(params.path, newFile, (err, res) => { + if (err) { + callback(err, null) + return false + } + + (async () => { + const file = await imagemin([newFile], '/tmp', { + plugins: [ + imageminJpegtran(), + imageminPngquant({ quality: '65-80' }) + ] + }) + + this._send({ + path: file[0].path, + filename: params.filename + }, (err, res) => { + callback(err, res) + fs.unlink(file[0].path, () => {}) + }) + })() + }) + } + + /** + * Upload file on s3 + * @param {Object} params {path: String, filename: String} + * @param {Function} callback + */ + upload (params, callback) { + fs.readFile(params.path, (err, data) => { + if (err) { + callback(err, null) + return false + } + + this._compress(params, callback) + }) + } + + deleteObjects (files, callback) { + const s3 = new AWS.S3() + const basePath = process.env.AWS_URL + process.env.AWS_BASEFOLDER + let items = [] + + files.forEach((file) => { + if (file) { + items.push({ Key: file.replace(basePath, '') }) + } + }) + + if (items.length > 0) { + s3.deleteObjects({ + Bucket: process.env.AWS_BUCKET, + Delete: { // required + Objects: items + } + }, callback) + } else { + callback(null, { code: 200, res: 'No file deleted' }) + } + } +} + +module.exports = Aws diff --git a/libs/passport.js b/libs/passport.js new file mode 100644 index 0000000..3557a8e --- /dev/null +++ b/libs/passport.js @@ -0,0 +1,67 @@ +const BasicAuth = require('passport-http').BasicStrategy +const bCrypt = require('bcrypt-nodejs') +const users = require('../models').Users + +/** + * Compare bcrypt password + * @param {Object} user + * @param {String} password + * @returns {Boolean} + */ +let isValidPassword = function (user, password) { + return bCrypt.compareSync(password, user.password) +} + +module.exports = function (passport) { + passport.serializeUser( + function (user, done) { + done(null, user.id) + } + ) + + passport.deserializeUser( + function (id, done) { + users.findById(id) + .then(user => { + if (!user) { + done(new Error('No user found'), user) + return false + } + done(null, user) + }) + .catch(e => { + done(e, null) + }) + } + ) + + passport.use( + 'basic-auth', new BasicAuth({ + usernameField: 'email', + passwordField: 'password', + passReqToCallback: true + }, + function (req, email, password, done) { + users.find({ + where: { + email: email + } + }) + .then(user => { + if (!user) { + done(new Error('No user found')) + return false + } + if (!isValidPassword(user, password)) { + return done(null, false, { + message: 'Invalid password' + }) + } + return done(null, user) + }) + .catch(e => { + done(e, null) + }) + }) + ) +} diff --git a/middleware/VegetableTypes.js b/middleware/VegetableTypes.js new file mode 100644 index 0000000..b26255a --- /dev/null +++ b/middleware/VegetableTypes.js @@ -0,0 +1,90 @@ +const vegetableTypes = require('../models').vegetableTypes + +class VegetableTypes { + static getAll (req, callback) { + vegetableTypes.findAndCountAll({ + order: [ + ['name', 'ASC'] + ] + }) + .then(items => { + if (!items) { + callback(new Error('No vegetable type found'), 204) + return false + } + callback(null, items) + }) + .catch((e) => { + callback(e, null) + }) + } + + createOne (req, callback) { + vegetableTypes.create(req.body) + .then(item => { + callback(null, item) + }) + .catch(e => { + callback(e, null) + }) + } + + static getOne (req, callback) { + vegetableTypes.findById(Number(req.params.vegetableTypesId)) + .then(item => { + if (!item) { + callback(new Error('Item vegetable type not found'), 404) + return false + } + callback(null, item) + }) + .catch((e) => { + callback(e, null) + }) + } + + patchOne (req, callback) { + VegetableTypes.getOne(req, (err, item) => { + if (err) { + callback(err, item) + return false + } + + item.update(req.body) + .then(animal => { + callback(null, animal) + }) + .catch(e => { + callback(e, null) + }) + }) + } + + deleteOne (req, callback) { + VegetableTypes.getOne(req, (err, item) => { + if (err) { + callback(err, item) + return false + } + + vegetableTypes.destroy({ + where: { + id: req.params.vegetableTypesId + } + }) + .then(deleted => { + if (deleted === 0) { + callback(new Error('Error when trying to delete item')) + return false + } + + callback(null, null) + }) + .catch(e => { + callback(e, null) + }) + }) + } +} + +module.exports = VegetableTypes diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js new file mode 100644 index 0000000..2411fe8 --- /dev/null +++ b/middleware/Vegetables.js @@ -0,0 +1,223 @@ +const vegetables = require('../models').vegetables +const VegetableTypes = require('./VegetableTypes') +const uuid = require('uuid/v4') +const multer = require('multer') +const path = require('path') +const fs = require('fs') +const Aws = require('../libs/aws') + +class Vegetables { + constructor () { + this._upload = multer({ + storage: multer.diskStorage({}), + fileFilter: function (req, file, cb) { + const filetypes = /jpg|jpeg|png|JPG|JPEG|PNG/ + const mimetype = filetypes.test(file.mimetype) + const extname = filetypes.test(path.extname(file.originalname).toLowerCase()) + + if (mimetype && extname) { + return cb(null, true) + } + cb(new Error('Error: File upload only supports the following filetypes - ' + filetypes)) + } + }).single('mainPicture') + } + + _createItem (req, callback) { + let newItem = req.body + newItem.vegetableTypeId = req.params.vegetableTypesId + + vegetables.create(newItem) + .then(item => { + callback(null, item) + }) + .catch(e => { + callback(e, null) + }) + } + + _patchOne (item, values, callback) { + item.update(values) + .then(item => { + callback(null, item) + }) + .catch(e => { + callback(e, null) + }) + } + + _deleteOne (item, req, callback) { + vegetables.destroy({ + where: { + id: req.params.vegetablesId + } + }) + .then(deleted => { + if (deleted === 0) { + callback(new Error('Error when trying to delete item')) + return false + } + + callback(null, null) + }) + .catch(e => { + callback(e, null) + }) + } + + _deleteMedias (path, callback) { + const aws = new Aws() + if (!callback) { + callback = (e) => { + if (e) { + console.error(e) + } + } + } + + aws.deleteObjects([path], callback) + } + + static getAll (req, callback) { + vegetables.findAndCountAll({ + where: { + vegetableTypeId: req.params.vegetableTypesId + }, + order: [ + ['name', 'ASC'] + ] + }) + .then(items => { + if (!items) { + callback(new Error('No vegetable found'), 204) + return false + } + callback(null, items) + }) + .catch((e) => { + callback(e, null) + }) + } + + createOne (req, callback) { + VegetableTypes.getOne(req, (err, universe) => { + if (err) { + callback(err, universe) + return false + } + + this._upload(req, req.body, (err) => { + if (err) { + callback(err, null) + return false + } + + if (req.file) { + let aws = new Aws() + aws.upload({ + path: req.file.path, + filename: `main_${uuid()}.${req.file.originalname.split('.')[req.file.originalname.split('.').length - 1]}` + }, (err, res) => { + if (!err) { req.body.mainPicture = res.file } + this._createItem(req, callback) + fs.unlink(req.file.path, () => {}) + }) + } else { + this._createItem(req, callback) + } + }) + }) + } + + static getOne (req, callback) { + vegetables.find({ + where: { + vegetableTypeId: req.params.vegetableTypesId, + id: req.params.vegetablesId + }, + include: ['Type'] + }) + .then(item => { + if (!item) { + callback(new Error('Vegetable not found'), 404) + return false + } + callback(null, item) + }) + .catch((e) => { + callback(e, null) + }) + } + + patchOne (req, callback) { + Vegetables.getOne(req, (err, item) => { + if (err) { + callback(err, item) + return false + } + + this._upload(req, req.body, (err) => { + if (err) { + callback(err, null) + return false + } + + let values = req.body + + if (req.file) { + let aws = new Aws() + + if (item.mainPicture !== null && item.mainPicture !== '') { + this._deleteMedias(item.mainPicture) + } + + aws.upload({ + path: req.file.path, + filename: `main_${req.params.vegetablesId}${path.extname(req.file.originalname).toLowerCase()}` + }, (err, res) => { + if (!err) { + values.mainPicture = res.file + } + this._patchOne(item, values, callback) + fs.unlink(req.file.path, () => {}) + }) + } else { + this._patchOne(item, values, callback) + } + }) + }) + } + + deleteOne (req, callback) { + Vegetables.getOne(req, (err, item) => { + if (err) { + callback(err, item) + return false + } + + if (item.mainPicture !== null && item.mainPicture !== '') { + const aws = new Aws() + if (!callback) { + callback = (e) => { + if (e) { + console.error(e) + } + } + } + + this._deleteMedias(item.mainPicture, (e, res) => { + if (e) { + callback(e, null) + return false + } + + this._deleteOne(item, req, callback) + }) + } else { + this._deleteOne(item, req, callback) + } + }) + } +} + +module.exports = Vegetables diff --git a/migrations/20180907185312-create-vegetables.js b/migrations/20180907185312-create-vegetables.js index 9681a1a..188f239 100644 --- a/migrations/20180907185312-create-vegetables.js +++ b/migrations/20180907185312-create-vegetables.js @@ -22,7 +22,7 @@ module.exports = { lng: { type: Sequelize.INTEGER }, - vegetableTypes_id: { + vegetableTypeId: { type: Sequelize.INTEGER, references: { model: 'vegetableTypes', key: 'id' } }, diff --git a/migrations/20180907185320-create-vegetables_pictures.js b/migrations/20180907185320-create-vegetables_pictures.js index 658d373..c0e4b1a 100644 --- a/migrations/20180907185320-create-vegetables_pictures.js +++ b/migrations/20180907185320-create-vegetables_pictures.js @@ -13,7 +13,7 @@ module.exports = { order: { type: Sequelize.INTEGER }, - vegetables_id: { + vegetablesId: { type: Sequelize.INTEGER, references: { model: 'vegetables', key: 'id' } }, diff --git a/models/vegetables.js b/models/vegetables.js index 867211d..77b835b 100644 --- a/models/vegetables.js +++ b/models/vegetables.js @@ -5,7 +5,7 @@ module.exports = (sequelize, DataTypes) => { description: DataTypes.TEXT, lat: DataTypes.INTEGER, lng: DataTypes.INTEGER, - vegetableTypes_id: { + vegetableTypeId: { type: DataTypes.INTEGER, references: 'vegetableTypes', referencesKey: 'id' @@ -13,8 +13,8 @@ module.exports = (sequelize, DataTypes) => { }, {}) vegetables.associate = function (models) { vegetables.hasOne(models.vegetableTypes, { - as: 'VegetableTypes', - foreignKey: 'vegetableTypes_id' + as: 'Type', + foreignKey: 'id' }) vegetables.hasMany(models.vegetablePictures, { as: 'Pictures', diff --git a/models/vegetables_pictures.js b/models/vegetables_pictures.js index fb2b8f1..52a600b 100644 --- a/models/vegetables_pictures.js +++ b/models/vegetables_pictures.js @@ -2,14 +2,14 @@ module.exports = (sequelize, DataTypes) => { const vegetablePictures = sequelize.define('vegetablePictures', { url: DataTypes.STRING, order: DataTypes.INTEGER, - vegetables_id: { + vegetablesId: { type: DataTypes.INTEGER, references: 'vegetables', referencesKey: 'id' } }, {}) vegetablePictures.associate = function (models) { - vegetablePictures.hasOne(models.vegetables, { as: 'Vegetables', foreignKey: 'vegetables_id' }) + vegetablePictures.hasOne(models.vegetables, { as: 'Vegetables', foreignKey: 'id' }) } return vegetablePictures } diff --git a/package-lock.json b/package-lock.json index 85ef318..8ebae44 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,20 @@ "js-tokens": "^4.0.0" } }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz", + "integrity": "sha512-yprFYuno9FtNsSHVlSWd+nRlmGoAbqbeCwOryP6sC/zoCjhpArcRMYp19EvpSUSizJAlsXEwJv+wcWS9XaXdMw==" + }, "@types/babel-types": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.4.tgz", @@ -145,7 +159,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, "requires": { "ansi-wrap": "0.1.0" } @@ -168,8 +181,7 @@ "ansi-wrap": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" }, "ansicolors": { "version": "0.3.2", @@ -195,6 +207,26 @@ "buffer-equal": "^1.0.0" } }, + "append-field": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-0.1.0.tgz", + "integrity": "sha1-bdxY+gg8e8VF08WZWygwzCNm1Eo=" + }, + "archive-type": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz", + "integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=", + "requires": { + "file-type": "^3.1.0" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + } + } + }, "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", @@ -213,8 +245,7 @@ "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 + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, "arr-filter": { "version": "1.1.2", @@ -228,8 +259,7 @@ "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 + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, "arr-map": { "version": "2.0.2", @@ -243,8 +273,12 @@ "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 + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=" }, "array-each": { "version": "1.0.1", @@ -252,6 +286,11 @@ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", "dev": true }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -321,7 +360,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, "requires": { "array-uniq": "^1.0.1" } @@ -329,20 +367,17 @@ "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" }, "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 + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, "asap": { "version": "2.0.6", @@ -352,8 +387,7 @@ "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 + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "async-done": { "version": "1.3.1", @@ -373,6 +407,11 @@ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, + "async-each-series": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz", + "integrity": "sha1-9C/YFV048hpbjqB8KOBj7RcAsTg=" + }, "async-settle": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", @@ -385,8 +424,30 @@ "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "aws-sdk": { + "version": "2.311.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.311.0.tgz", + "integrity": "sha512-OnIvCu3146CLCy9uEf9jj9PlIpKz5Notz6EDV0FQFMdE7QqKCBUFVgfS+lqQCiKOTMTDx+z+9MJmNLUMyGqIjA==", + "requires": { + "buffer": "4.9.1", + "events": "1.1.1", + "ieee754": "1.1.8", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.1.0", + "xml2js": "0.4.19" + }, + "dependencies": { + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + } + } }, "babel-runtime": { "version": "6.26.0", @@ -433,14 +494,12 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "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", @@ -455,7 +514,6 @@ "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" } @@ -464,7 +522,6 @@ "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" } @@ -473,7 +530,6 @@ "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" } @@ -482,7 +538,6 @@ "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", @@ -492,11 +547,15 @@ "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 + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + }, "basic-auth": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", @@ -505,12 +564,113 @@ "safe-buffer": "5.1.1" } }, + "bcrypt-nodejs": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/bcrypt-nodejs/-/bcrypt-nodejs-0.0.3.tgz", + "integrity": "sha1-xgkX8m3CNWYVZsaBBhwwPCsohCs=" + }, + "beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=" + }, + "bin-build": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz", + "integrity": "sha1-EfjdYfcP/Por3KpbRvXo/t1CIcw=", + "requires": { + "archive-type": "^3.0.1", + "decompress": "^3.0.0", + "download": "^4.1.2", + "exec-series": "^1.0.0", + "rimraf": "^2.2.6", + "tempfile": "^1.0.0", + "url-regex": "^3.0.0" + }, + "dependencies": { + "tempfile": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", + "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", + "requires": { + "os-tmpdir": "^1.0.0", + "uuid": "^2.0.1" + } + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" + } + } + }, + "bin-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-2.0.0.tgz", + "integrity": "sha1-hvjm9CU4k99g3DFpV/WvAqywWTA=", + "requires": { + "executable": "^1.0.0" + } + }, + "bin-version": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-1.0.4.tgz", + "integrity": "sha1-nrSY7m/Xb3q5p8FgQ2+JV5Q1144=", + "requires": { + "find-versions": "^1.0.0" + } + }, + "bin-version-check": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-2.1.0.tgz", + "integrity": "sha1-5OXfKQuQaffRETJAMe/BP90RpbA=", + "requires": { + "bin-version": "^1.0.0", + "minimist": "^1.1.0", + "semver": "^4.0.3", + "semver-truncate": "^1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=" + } + } + }, + "bin-wrapper": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz", + "integrity": "sha1-Z9MwYmLksaXy+I7iNGT2plVneus=", + "requires": { + "bin-check": "^2.0.0", + "bin-version-check": "^2.1.0", + "download": "^4.0.0", + "each-async": "^1.1.1", + "lazy-req": "^1.0.0", + "os-filter-obj": "^1.0.0" + } + }, "binary-extensions": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", "dev": true }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, "bluebird": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz", @@ -537,7 +697,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -547,7 +706,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -565,30 +723,141 @@ "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" } } } }, + "buffer": { + "version": "4.9.1", + "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, "buffer-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", "dev": true }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "buffer-to-vinyl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz", + "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=", + "requires": { + "file-type": "^3.1.0", + "readable-stream": "^2.0.2", + "uuid": "^2.0.1", + "vinyl": "^1.0.0" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" + }, + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + } + } }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + }, + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } }, "bytes": { "version": "3.0.0", @@ -599,7 +868,6 @@ "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", @@ -612,6 +880,11 @@ "unset-value": "^1.0.0" } }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + }, "caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", @@ -632,6 +905,27 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + } + } + }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" + }, "cardinal": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", @@ -641,6 +935,24 @@ "redeyed": "~2.1.0" } }, + "caw": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz", + "integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=", + "requires": { + "get-proxy": "^1.0.1", + "is-obj": "^1.0.0", + "object-assign": "^3.0.0", + "tunnel-agent": "^0.4.0" + }, + "dependencies": { + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" + } + } + }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", @@ -706,7 +1018,6 @@ "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", @@ -718,7 +1029,6 @@ "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" } @@ -805,6 +1115,11 @@ "shimmer": "^1.1.0" } }, + "co": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", + "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=" + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -826,7 +1141,6 @@ "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" @@ -850,8 +1164,7 @@ "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" }, "commander": { "version": "2.8.1", @@ -864,20 +1177,17 @@ "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-E3kY1teCg/ffemt8WmPhQOaUJeY=" }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -885,6 +1195,20 @@ "typedarray": "^0.0.6" } }, + "config-chain": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", + "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "console-stream": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", + "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=" + }, "constantinople": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", @@ -916,7 +1240,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, "requires": { "safe-buffer": "~5.1.1" } @@ -943,8 +1266,7 @@ "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "copy-props": { "version": "2.0.4", @@ -964,14 +1286,25 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crc": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", + "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=" + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "requires": { + "capture-stack-trace": "^1.0.0" + } }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -980,6 +1313,14 @@ "which": "^1.2.9" } }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "requires": { + "array-find-index": "^1.0.1" + } + }, "d": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", @@ -989,6 +1330,11 @@ "es5-ext": "^0.10.9" } }, + "dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1005,8 +1351,497 @@ "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 + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz", + "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=", + "requires": { + "buffer-to-vinyl": "^1.0.0", + "concat-stream": "^1.4.6", + "decompress-tar": "^3.0.0", + "decompress-tarbz2": "^3.0.0", + "decompress-targz": "^3.0.0", + "decompress-unzip": "^3.0.0", + "stream-combiner2": "^1.1.1", + "vinyl-assign": "^1.0.1", + "vinyl-fs": "^2.2.0" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "^1.0.0" + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-stream": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", + "requires": { + "extend": "^3.0.0", + "glob": "^5.0.3", + "glob-parent": "^3.0.0", + "micromatch": "^2.3.7", + "ordered-read-streams": "^0.3.0", + "through2": "^0.6.0", + "to-absolute-glob": "^0.1.1", + "unique-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "requires": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + } + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-valid-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "ordered-read-streams": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", + "requires": { + "is-stream": "^1.0.1", + "readable-stream": "^2.0.1" + } + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "to-absolute-glob": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", + "requires": { + "extend-shallow": "^2.0.1" + } + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + }, + "vinyl-fs": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", + "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", + "requires": { + "duplexify": "^3.2.0", + "glob-stream": "^5.3.2", + "graceful-fs": "^4.0.0", + "gulp-sourcemaps": "1.6.0", + "is-valid-glob": "^0.3.0", + "lazystream": "^1.0.0", + "lodash.isequal": "^4.0.0", + "merge-stream": "^1.0.0", + "mkdirp": "^0.5.0", + "object-assign": "^4.0.0", + "readable-stream": "^2.0.4", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^1.0.0", + "through2": "^2.0.0", + "through2-filter": "^2.0.0", + "vali-date": "^1.0.0", + "vinyl": "^1.0.0" + } + } + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "decompress-tar": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz", + "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=", + "requires": { + "is-tar": "^1.0.0", + "object-assign": "^2.0.0", + "strip-dirs": "^1.0.0", + "tar-stream": "^1.1.1", + "through2": "^0.6.1", + "vinyl": "^0.4.3" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=" + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "requires": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "requires": { + "clone": "^0.2.0", + "clone-stats": "^0.0.1" + } + } + } + }, + "decompress-tarbz2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz", + "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=", + "requires": { + "is-bzip2": "^1.0.0", + "object-assign": "^2.0.0", + "seek-bzip": "^1.0.3", + "strip-dirs": "^1.0.0", + "tar-stream": "^1.1.1", + "through2": "^0.6.1", + "vinyl": "^0.4.3" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=" + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "requires": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "requires": { + "clone": "^0.2.0", + "clone-stats": "^0.0.1" + } + } + } + }, + "decompress-targz": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz", + "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=", + "requires": { + "is-gzip": "^1.0.0", + "object-assign": "^2.0.0", + "strip-dirs": "^1.0.0", + "tar-stream": "^1.1.1", + "through2": "^0.6.1", + "vinyl": "^0.4.3" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=" + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "requires": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "requires": { + "clone": "^0.2.0", + "clone-stats": "^0.0.1" + } + } + } + }, + "decompress-unzip": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz", + "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=", + "requires": { + "is-zip": "^1.0.0", + "read-all-stream": "^3.0.0", + "stat-mode": "^0.2.0", + "strip-dirs": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^1.0.0", + "yauzl": "^2.2.1" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + } + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { "version": "0.1.3", @@ -1050,7 +1885,6 @@ "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" @@ -1060,7 +1894,6 @@ "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" } @@ -1069,7 +1902,6 @@ "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" } @@ -1078,7 +1910,6 @@ "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", @@ -1088,8 +1919,7 @@ "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 + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -1129,6 +1959,62 @@ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -1148,11 +2034,257 @@ "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.0.tgz", "integrity": "sha1-2hkZgci41xPKARXViYzzl8Lw3dA=" }, + "download": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/download/-/download-4.4.3.tgz", + "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=", + "requires": { + "caw": "^1.0.1", + "concat-stream": "^1.4.7", + "each-async": "^1.0.0", + "filenamify": "^1.0.1", + "got": "^5.0.0", + "gulp-decompress": "^1.2.0", + "gulp-rename": "^1.2.0", + "is-url": "^1.2.0", + "object-assign": "^4.0.1", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.2", + "stream-combiner2": "^1.1.1", + "vinyl": "^1.0.0", + "vinyl-fs": "^2.2.0", + "ware": "^1.2.0" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "^1.0.0" + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-stream": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", + "requires": { + "extend": "^3.0.0", + "glob": "^5.0.3", + "glob-parent": "^3.0.0", + "micromatch": "^2.3.7", + "ordered-read-streams": "^0.3.0", + "through2": "^0.6.0", + "to-absolute-glob": "^0.1.1", + "unique-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "requires": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + } + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-valid-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "ordered-read-streams": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", + "requires": { + "is-stream": "^1.0.1", + "readable-stream": "^2.0.1" + } + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "to-absolute-glob": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", + "requires": { + "extend-shallow": "^2.0.1" + } + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + }, + "vinyl-fs": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", + "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", + "requires": { + "duplexify": "^3.2.0", + "glob-stream": "^5.3.2", + "graceful-fs": "^4.0.0", + "gulp-sourcemaps": "1.6.0", + "is-valid-glob": "^0.3.0", + "lazystream": "^1.0.0", + "lodash.isequal": "^4.0.0", + "merge-stream": "^1.0.0", + "mkdirp": "^0.5.0", + "object-assign": "^4.0.0", + "readable-stream": "^2.0.4", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^1.0.0", + "through2": "^2.0.0", + "through2-filter": "^2.0.0", + "vali-date": "^1.0.0", + "vinyl": "^1.0.0" + } + } + } + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "^2.0.2" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, "duplexify": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", - "dev": true, "requires": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -1160,6 +2292,22 @@ "stream-shift": "^1.0.0" } }, + "each-async": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", + "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", + "requires": { + "onetime": "^1.0.0", + "set-immediate-shim": "^1.0.0" + }, + "dependencies": { + "onetime": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" + } + } + }, "each-props": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", @@ -1184,7 +2332,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, "requires": { "once": "^1.4.0" } @@ -1193,7 +2340,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -1250,8 +2396,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { "version": "5.5.0", @@ -1538,11 +2683,77 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "exec-buffer": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", + "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", + "requires": { + "execa": "^0.7.0", + "p-finally": "^1.0.0", + "pify": "^3.0.0", + "rimraf": "^2.5.4", + "tempfile": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "exec-series": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/exec-series/-/exec-series-1.0.3.tgz", + "integrity": "sha1-bSV6m+rEgqhyx3g7yGFYOfx3FDo=", + "requires": { + "async-each-series": "^1.1.0", + "object-assign": "^4.1.0" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "executable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/executable/-/executable-1.1.0.tgz", + "integrity": "sha1-h3mA6REvM5EGbaNyZd562ENKtNk=", + "requires": { + "meow": "^3.1.0" + } + }, "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", @@ -1557,7 +2768,6 @@ "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" } @@ -1566,13 +2776,50 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } } } }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "requires": { + "fill-range": "^2.1.0" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -1619,17 +2866,48 @@ "vary": "~1.1.2" } }, + "express-session": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz", + "integrity": "sha512-r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA==", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "crc": "3.4.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "on-headers": "~1.0.1", + "parseurl": "~1.3.2", + "uid-safe": "~2.1.5", + "utils-merge": "1.0.1" + } + }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "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" @@ -1639,7 +2917,6 @@ "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" } @@ -1672,7 +2949,6 @@ "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", @@ -1688,7 +2964,6 @@ "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" } @@ -1697,7 +2972,6 @@ "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" } @@ -1706,7 +2980,6 @@ "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" } @@ -1715,7 +2988,6 @@ "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" } @@ -1724,7 +2996,6 @@ "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", @@ -1734,8 +3005,7 @@ "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 + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -1743,7 +3013,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", - "dev": true, "requires": { "ansi-gray": "^0.1.1", "color-support": "^1.1.3", @@ -1756,6 +3025,19 @@ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, + "fast-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.2.tgz", + "integrity": "sha512-TR6zxCKftDQnUAPvkrCWdBgDq/gbqx8A3ApnBrR5rMvpp6+KMJI0Igw7fkWPgeVK0uhRXTXdvO3O+YP0CaUX2g==", + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.0.1", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.1", + "micromatch": "^3.1.10" + } + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -1768,6 +3050,14 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "~1.2.0" + } + }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -1787,11 +3077,35 @@ "object-assign": "^4.0.1" } }, + "file-type": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", + "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==" + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" + }, + "filename-reserved-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", + "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=" + }, + "filenamify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", + "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=", + "requires": { + "filename-reserved-regex": "^1.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -1803,7 +3117,6 @@ "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" } @@ -1828,12 +3141,22 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, "requires": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" } }, + "find-versions": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz", + "integrity": "sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=", + "requires": { + "array-uniq": "^1.0.0", + "get-stdin": "^4.0.1", + "meow": "^3.5.0", + "semver-regex": "^1.0.0" + } + }, "findup-sync": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", @@ -1870,6 +3193,11 @@ "parse-filepath": "^1.0.1" } }, + "first-chunk-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=" + }, "flagged-respawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz", @@ -1901,8 +3229,7 @@ "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, "for-own": { "version": "1.0.0", @@ -1922,7 +3249,6 @@ "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" } @@ -1932,6 +3258,11 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", @@ -1945,8 +3276,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "1.2.4", @@ -2507,17 +3837,33 @@ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, + "get-proxy": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz", + "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=", + "requires": { + "rc": "^1.1.2" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, "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", @@ -2527,11 +3873,42 @@ "path-is-absolute": "^1.0.0" } }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, "requires": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -2541,7 +3918,6 @@ "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" } @@ -2566,6 +3942,11 @@ "unique-stream": "^2.0.2" } }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" + }, "glob-watcher": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.1.tgz", @@ -2626,16 +4007,36 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", - "dev": true, "requires": { "sparkles": "^1.0.0" } }, + "got": { + "version": "5.7.1", + "resolved": "http://registry.npmjs.org/got/-/got-5.7.1.tgz", + "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", + "requires": { + "create-error-class": "^3.0.1", + "duplexer2": "^0.1.4", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "node-status-codes": "^1.0.0", + "object-assign": "^4.0.1", + "parse-json": "^2.1.0", + "pinkie-promise": "^2.0.0", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.5", + "timed-out": "^3.0.0", + "unzip-response": "^1.0.2", + "url-parse-lax": "^1.0.0" + } + }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, "graceful-readlink": { "version": "1.0.1", @@ -2755,11 +4156,162 @@ } } }, + "gulp-decompress": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz", + "integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=", + "requires": { + "archive-type": "^3.0.0", + "decompress": "^3.0.0", + "gulp-util": "^3.0.1", + "readable-stream": "^2.0.2" + } + }, + "gulp-rename": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.4.0.tgz", + "integrity": "sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg==" + }, + "gulp-sourcemaps": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", + "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", + "requires": { + "convert-source-map": "^1.1.1", + "graceful-fs": "^4.1.2", + "strip-bom": "^2.0.0", + "through2": "^2.0.0", + "vinyl": "^1.0.0" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + } + } + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "requires": { + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", + "replace-ext": "0.0.1", + "through2": "^2.0.0", + "vinyl": "^0.5.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + } + } + }, "gulplog": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, "requires": { "glogg": "^1.0.0" } @@ -2772,23 +4324,58 @@ "function-bind": "^1.1.1" } }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "requires": { + "sparkles": "^1.0.0" + } + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" + }, "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "dev": true }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -2799,7 +4386,6 @@ "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" @@ -2809,7 +4395,6 @@ "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" } @@ -2828,8 +4413,7 @@ "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" }, "http-errors": { "version": "1.6.3", @@ -2847,18 +4431,107 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, + "imagemin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-6.0.0.tgz", + "integrity": "sha512-m4Mxwt2QvCp1F85HXoTungXk0Y6XzuvQGqrK9qEddQfo/7x4aZjRENmyXXfc29ei4Mk55rW002bORG86YM3/aQ==", + "requires": { + "file-type": "^8.1.0", + "globby": "^8.0.1", + "make-dir": "^1.0.0", + "p-pipe": "^1.1.0", + "pify": "^3.0.0", + "replace-ext": "^1.0.0" + }, + "dependencies": { + "globby": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", + "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "imagemin-jpegtran": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-5.0.2.tgz", + "integrity": "sha1-5ogiY7j3kW/duABkDPddLpcNKtY=", + "requires": { + "exec-buffer": "^3.0.0", + "is-jpg": "^1.0.0", + "jpegtran-bin": "^3.0.0" + } + }, + "imagemin-pngquant": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/imagemin-pngquant/-/imagemin-pngquant-6.0.0.tgz", + "integrity": "sha512-lZ87Y7u0UaJuhtQZ2wkKyxsFeNTEv1C5xxoHN7jFD89rKpiC/Qu2cIYGAOypOsxqAxWlsHaoz0hJlFFdCnG6Zg==", + "requires": { + "execa": "^0.10.0", + "is-png": "^1.0.0", + "is-stream": "^1.1.0", + "pngquant-bin": "^5.0.0" + }, + "dependencies": { + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + } + } + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "requires": { + "repeating": "^2.0.0" + } + }, "inflection": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", @@ -2868,7 +4541,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -2882,8 +4554,7 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { "version": "6.2.0", @@ -2918,6 +4589,11 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, + "ip-regex": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", + "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=" + }, "ipaddr.js": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", @@ -2937,7 +4613,6 @@ "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" } @@ -2945,8 +4620,7 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "is-binary-path": { "version": "1.0.1", @@ -2971,16 +4645,19 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, "requires": { "builtin-modules": "^1.0.0" } }, + "is-bzip2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz", + "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=" + }, "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" } @@ -2989,7 +4666,6 @@ "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", @@ -2999,11 +4675,23 @@ "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 + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "requires": { + "is-primitive": "^2.0.0" + } + }, "is-expression": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", @@ -3023,14 +4711,20 @@ "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 + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "^1.0.0" + } }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -3042,11 +4736,25 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, "requires": { "is-extglob": "^2.1.1" } }, + "is-gzip": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", + "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=" + }, + "is-jpg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-1.0.1.tgz", + "integrity": "sha1-KW1X/dmc4BBDSnKD40armhA16XU=" + }, + "is-natural-number": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz", + "integrity": "sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=" + }, "is-negated-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", @@ -3057,11 +4765,20 @@ "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" } }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + }, "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", @@ -3086,15 +4803,34 @@ "path-is-inside": "^1.0.1" } }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, "requires": { "isobject": "^3.0.1" } }, + "is-png": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz", + "integrity": "sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=" + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -3105,6 +4841,11 @@ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", @@ -3128,6 +4869,21 @@ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-tar": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz", + "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=" + }, "is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", @@ -3137,11 +4893,15 @@ "unc-path-regex": "^0.1.2" } }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, "is-valid-glob": { "version": "1.0.0", @@ -3152,26 +4912,51 @@ "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 + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-zip": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz", + "integrity": "sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=" }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "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 + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, + "jpegtran-bin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-3.2.0.tgz", + "integrity": "sha1-9g7PSumZwL2tLp+83ytvCYHnops=", + "requires": { + "bin-build": "^2.0.0", + "bin-wrapper": "^3.0.0", + "logalot": "^2.0.0" + } }, "js-stringify": { "version": "1.0.2", @@ -3204,7 +4989,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, "requires": { "jsonify": "~0.0.0" } @@ -3218,8 +5002,7 @@ "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" }, "jstransformer": { "version": "1.0.0", @@ -3259,11 +5042,15 @@ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, + "lazy-req": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", + "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=" + }, "lazystream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, "requires": { "readable-stream": "^2.0.5" } @@ -3316,7 +5103,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -3348,12 +5134,140 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" + }, + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=" + }, + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=" + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" + }, + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=" + }, + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=" + }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "requires": { + "lodash._root": "^3.0.0" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" + } + }, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" + } + }, + "logalot": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", + "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", + "requires": { + "figures": "^1.3.5", + "squeak": "^1.0.0" + }, + "dependencies": { + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + } + } + }, "long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", @@ -3364,6 +5278,31 @@ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lpad-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", + "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=", + "requires": { + "get-stdin": "^4.0.1", + "indent-string": "^2.1.0", + "longest": "^1.0.0", + "meow": "^3.3.0" + } + }, "lru-cache": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", @@ -3373,6 +5312,21 @@ "yallist": "^2.1.2" } }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, "make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", @@ -3393,14 +5347,17 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" }, "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" } @@ -3417,16 +5374,58 @@ "stack-trace": "0.0.10" } }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "requires": { + "readable-stream": "^2.0.1" + } + }, + "merge2": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.2.tgz", + "integrity": "sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg==" + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -3436,7 +5435,6 @@ "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", @@ -3456,8 +5454,7 @@ "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 + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -3485,11 +5482,15 @@ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3497,14 +5498,12 @@ "minimist": { "version": "0.0.8", "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "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" @@ -3514,7 +5513,6 @@ "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" } @@ -3525,7 +5523,6 @@ "version": "0.5.1", "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" } @@ -3560,6 +5557,67 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "multer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.3.1.tgz", + "integrity": "sha512-JHdEoxkA/5NgZRo91RNn4UT+HdcJV9XUo01DTkKC7vo1erNIngtuaw9Y0WI8RdTlyi+wMIbunflhghzVLuGJyw==", + "requires": { + "append-field": "^0.1.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.1", + "object-assign": "^3.0.0", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "dependencies": { + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" + } + } + }, + "multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "requires": { + "duplexer2": "0.0.2" + }, + "dependencies": { + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "requires": { + "readable-stream": "~1.1.9" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "mute-stdout": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", @@ -3615,7 +5673,6 @@ "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", @@ -3633,8 +5690,7 @@ "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 + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -3658,14 +5714,17 @@ "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node-status-codes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", + "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=" }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, "requires": { "hosted-git-info": "^2.1.4", "is-builtin-module": "^1.0.0", @@ -3677,7 +5736,6 @@ "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" } @@ -3691,11 +5749,34 @@ "once": "^1.3.2" } }, + "npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "requires": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "object-assign": { "version": "4.1.1", @@ -3706,7 +5787,6 @@ "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", @@ -3717,7 +5797,6 @@ "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" } @@ -3734,7 +5813,6 @@ "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" } @@ -3773,11 +5851,29 @@ "make-iterator": "^1.0.0" } }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "^1.0.1" + } + } + } + }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, "requires": { "isobject": "^3.0.1" } @@ -3809,7 +5905,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -3854,6 +5949,11 @@ "readable-stream": "^2.0.1" } }, + "os-filter-obj": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-1.0.3.tgz", + "integrity": "sha1-WRUzDZDs7VV9LZOKMcbdIU2cY60=" + }, "os-locale": { "version": "1.4.0", "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", @@ -3866,8 +5966,25 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" + }, + "p-event": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", + "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", + "requires": { + "p-timeout": "^1.1.1" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-limit": { "version": "1.3.0", @@ -3887,6 +6004,32 @@ "p-limit": "^1.1.0" } }, + "p-map-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", + "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=", + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-pipe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", + "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=" + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=" + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "requires": { + "p-finally": "^1.0.0" + } + }, "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", @@ -3904,11 +6047,36 @@ "path-root": "^0.1.1" } }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, "requires": { "error-ex": "^1.2.0" } @@ -3927,20 +6095,39 @@ "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "passport": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.0.tgz", + "integrity": "sha1-xQlWkTR71a07XhgCOMORTRbwWBE=", + "requires": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + } + }, + "passport-http": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/passport-http/-/passport-http-0.3.0.tgz", + "integrity": "sha1-juU9Q4C+nGDfIVGSUCmCb3cRVgM=", + "requires": { + "passport-strategy": "1.x.x" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, "requires": { "pinkie-promise": "^2.0.0" } @@ -3948,8 +6135,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { "version": "1.0.2", @@ -3960,8 +6146,7 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { "version": "1.0.6", @@ -3992,30 +6177,36 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", "pinkie-promise": "^2.0.0" } }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, "requires": { "pinkie": "^2.0.0" } @@ -4035,11 +6226,303 @@ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", "dev": true }, + "pngquant-bin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-5.0.0.tgz", + "integrity": "sha512-oJ9Kcmm5oSFkgvYB32bopBN0F6lw0OBnVY36IpkIteBLKt9s8EswiOzAsbSVZ79I8zrvoP/i8IcQPZxsORCOfg==", + "requires": { + "bin-build": "^3.0.0", + "bin-wrapper": "^3.0.0", + "execa": "^0.10.0", + "logalot": "^2.0.0" + }, + "dependencies": { + "bin-build": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", + "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==", + "requires": { + "decompress": "^4.0.0", + "download": "^6.2.2", + "execa": "^0.7.0", + "p-map-series": "^1.0.0", + "tempfile": "^2.0.0" + }, + "dependencies": { + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + } + } + }, + "caw": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", + "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "requires": { + "get-proxy": "^2.0.0", + "isurl": "^1.0.0-alpha5", + "tunnel-agent": "^0.6.0", + "url-to-options": "^1.0.1" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "decompress": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", + "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + } + } + }, + "download": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", + "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", + "requires": { + "caw": "^2.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.0.0", + "ext-name": "^5.0.0", + "file-type": "5.2.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^7.0.0", + "make-dir": "^1.0.0", + "p-event": "^1.0.0", + "pify": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + } + } + }, + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" + }, + "filenamify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", + "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } + }, + "get-proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", + "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "requires": { + "npm-conf": "^1.1.0" + } + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "requires": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + } + } + }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" + }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "requires": { + "is-natural-number": "^4.0.1" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + } + } + }, "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 + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "prelude-ls": { "version": "1.1.2", @@ -4047,6 +6530,16 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + }, "pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", @@ -4073,6 +6566,11 @@ "asap": "~2.0.3" } }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + }, "proxy-addr": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", @@ -4233,6 +6731,38 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + }, + "randomatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", + "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==", + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", @@ -4272,11 +6802,37 @@ } } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "read-all-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", + "requires": { + "pinkie-promise": "^2.0.0", + "readable-stream": "^2.0.0" + } + }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, "requires": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -4287,7 +6843,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -4297,7 +6852,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -4311,8 +6865,7 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" } } }, @@ -4337,6 +6890,15 @@ "resolve": "^1.1.6" } }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, "redeyed": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", @@ -4350,11 +6912,18 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -4390,25 +6959,30 @@ "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 + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "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 + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "^1.0.0" + } + }, "replace-ext": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" }, "replace-homedir": { "version": "1.0.0", @@ -4479,8 +7053,7 @@ "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 + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, "restore-cursor": { "version": "2.0.0", @@ -4495,8 +7068,7 @@ "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 + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, "retry-as-promised": { "version": "2.3.2", @@ -4519,7 +7091,6 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, "requires": { "glob": "^7.0.5" } @@ -4551,7 +7122,6 @@ "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" } @@ -4562,6 +7132,19 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "sax": { + "version": "1.2.1", + "resolved": "http://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "seek-bzip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "requires": { + "commander": "~2.8.1" + } + }, "semver": { "version": "5.5.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", @@ -4576,6 +7159,19 @@ "sver-compat": "^1.5.0" } }, + "semver-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", + "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=" + }, + "semver-truncate": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", + "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", + "requires": { + "semver": "^5.3.0" + } + }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", @@ -4655,14 +7251,12 @@ "set-immediate-shim": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" }, "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", @@ -4674,7 +7268,6 @@ "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" } @@ -4690,7 +7283,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -4698,8 +7290,7 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "shimmer": { "version": "1.2.0", @@ -4709,8 +7300,12 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" }, "slice-ansi": { "version": "1.0.0", @@ -4725,7 +7320,6 @@ "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", @@ -4741,7 +7335,6 @@ "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" } @@ -4750,7 +7343,6 @@ "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" } @@ -4758,8 +7350,7 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, @@ -4767,7 +7358,6 @@ "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", @@ -4778,7 +7368,6 @@ "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" } @@ -4787,7 +7376,6 @@ "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" } @@ -4796,7 +7384,6 @@ "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" } @@ -4805,7 +7392,6 @@ "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", @@ -4815,8 +7401,7 @@ "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 + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -4824,11 +7409,26 @@ "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" } }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "requires": { + "sort-keys": "^1.0.0" + } + }, "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", @@ -4841,7 +7441,6 @@ "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", @@ -4853,20 +7452,17 @@ "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 + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, "sparkles": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==" }, "spdx-correct": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", - "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -4875,14 +7471,12 @@ "spdx-exceptions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", - "dev": true + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -4891,14 +7485,12 @@ "spdx-license-ids": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", - "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==", - "dev": true + "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==" }, "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" } @@ -4914,17 +7506,68 @@ "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" }, + "squeak": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", + "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=", + "requires": { + "chalk": "^1.0.0", + "console-stream": "^0.1.1", + "lpad-align": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", "dev": true }, + "stat-mode": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", + "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=" + }, "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" @@ -4934,7 +7577,6 @@ "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" } @@ -4946,6 +7588,15 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "requires": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, "stream-exhaust": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", @@ -4955,8 +7606,12 @@ "stream-shift": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" }, "string-width": { "version": "2.1.1", @@ -4972,7 +7627,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -4990,16 +7644,157 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, "requires": { "is-utf8": "^0.2.0" } }, + "strip-bom-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", + "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", + "requires": { + "first-chunk-stream": "^1.0.0", + "strip-bom": "^2.0.0" + } + }, + "strip-dirs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", + "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=", + "requires": { + "chalk": "^1.0.0", + "get-stdin": "^4.0.1", + "is-absolute": "^0.1.5", + "is-natural-number": "^2.0.0", + "minimist": "^1.1.0", + "sum-up": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "is-absolute": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", + "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", + "requires": { + "is-relative": "^0.1.0" + } + }, + "is-relative": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", + "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=" + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "requires": { + "get-stdin": "^4.0.1" + } + }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "sum-up": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz", + "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=", + "requires": { + "chalk": "^1.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } }, "supports-color": { "version": "5.5.0", @@ -5034,6 +7829,34 @@ "string-width": "^2.1.1" } }, + "tar-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", + "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.1.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.0", + "xtend": "^4.0.0" + } + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=" + }, + "tempfile": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", + "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", + "requires": { + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + } + }, "terraformer": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.9.tgz", @@ -5060,14 +7883,12 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, "requires": { "readable-stream": "^2.1.5", "xtend": "~4.0.1" @@ -5077,7 +7898,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", - "dev": true, "requires": { "through2": "~2.0.0", "xtend": "~4.0.0" @@ -5086,8 +7906,12 @@ "time-stamp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" + }, + "timed-out": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=" }, "tmp": { "version": "0.0.33", @@ -5108,6 +7932,11 @@ "is-negated-glob": "^1.0.0" } }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", @@ -5117,7 +7946,6 @@ "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" } @@ -5126,7 +7954,6 @@ "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", @@ -5138,7 +7965,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -5163,12 +7989,30 @@ "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", "dev": true }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -5190,8 +8034,7 @@ "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "uglify-js": { "version": "2.8.29", @@ -5216,6 +8059,40 @@ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "optional": true }, + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "requires": { + "random-bytes": "~1.0.0" + } + }, + "unbzip2-stream": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz", + "integrity": "sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==", + "requires": { + "buffer": "^3.0.1", + "through": "^2.3.6" + }, + "dependencies": { + "base64-js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=" + }, + "buffer": { + "version": "3.6.0", + "resolved": "http://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", + "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", + "requires": { + "base64-js": "0.0.8", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + } + } + }, "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", @@ -5249,7 +8126,6 @@ "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", @@ -5261,7 +8137,6 @@ "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" } @@ -5270,7 +8145,6 @@ "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", @@ -5284,7 +8158,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", - "dev": true, "requires": { "json-stable-stringify": "^1.0.0", "through2-filter": "^2.0.0" @@ -5299,7 +8172,6 @@ "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" @@ -5309,7 +8181,6 @@ "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", @@ -5320,7 +8191,6 @@ "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" } @@ -5330,11 +8200,15 @@ "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 + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" } } }, + "unzip-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" + }, "upath": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", @@ -5353,20 +8227,54 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "^1.0.1" + } + }, + "url-regex": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", + "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", + "requires": { + "ip-regex": "^1.0.1" + } + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" }, "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 + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utils-merge": { "version": "1.0.1", @@ -5387,11 +8295,15 @@ "homedir-polyfill": "^1.0.1" } }, + "vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=" + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -5427,6 +8339,15 @@ "replace-ext": "^1.0.0" } }, + "vinyl-assign": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/vinyl-assign/-/vinyl-assign-1.2.1.tgz", + "integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=", + "requires": { + "object-assign": "^4.0.1", + "readable-stream": "^2.0.0" + } + }, "vinyl-fs": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", @@ -5472,11 +8393,18 @@ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" }, + "ware": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", + "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", + "requires": { + "wrap-fn": "^0.1.0" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -5561,11 +8489,18 @@ } } }, + "wrap-fn": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz", + "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=", + "requires": { + "co": "3.1.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write": { "version": "0.2.1", @@ -5576,11 +8511,24 @@ "mkdirp": "^0.5.1" } }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "y18n": { "version": "3.2.1", @@ -5620,6 +8568,15 @@ "dev": true } } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } } } } diff --git a/package.json b/package.json index 2af7945..72a3eec 100644 --- a/package.json +++ b/package.json @@ -7,14 +7,24 @@ "dev": "DEBUG=myapp:* nodemon" }, "dependencies": { + "aws-sdk": "^2.311.0", + "bcrypt-nodejs": "0.0.3", "cookie-parser": "~1.4.3", "debug": "~2.6.9", "express": "~4.16.0", + "express-session": "^1.15.6", "http-errors": "~1.6.2", + "imagemin": "^6.0.0", + "imagemin-jpegtran": "^5.0.2", + "imagemin-pngquant": "^6.0.0", "morgan": "~1.9.0", + "multer": "^1.3.1", "mysql2": "^1.6.1", + "passport": "^0.4.0", + "passport-http": "^0.3.0", "pug": "2.0.0-beta11", - "sequelize": "^4.38.0" + "sequelize": "^4.38.0", + "uuid": "^3.3.2" }, "devDependencies": { "eslint": "^5.5.0", diff --git a/routes/index.js b/routes/index.js deleted file mode 100644 index 8e8ef59..0000000 --- a/routes/index.js +++ /dev/null @@ -1,8 +0,0 @@ -const express = require('express') -const router = express.Router() - -router.get('/', function (req, res, next) { - res.render('index', { title: 'Express' }) -}) - -module.exports = router diff --git a/routes/users.js b/routes/users.js deleted file mode 100644 index 56b4d36..0000000 --- a/routes/users.js +++ /dev/null @@ -1,8 +0,0 @@ -const express = require('express') -const router = express.Router() - -router.get('/', function (req, res, next) { - res.send('respond with a resource') -}) - -module.exports = router diff --git a/routes/vegetableTypes.js b/routes/vegetableTypes.js new file mode 100644 index 0000000..4e50f49 --- /dev/null +++ b/routes/vegetableTypes.js @@ -0,0 +1,75 @@ +const express = require('express') +const router = express.Router() +const VegetableTypes = require('../middleware/VegetableTypes') + +module.exports = function (passport) { + const basePath = '/api/types/' + const itemPath = basePath + ':vegetableTypesId' + + router.route(basePath) + .get( + function (req, res) { + VegetableTypes.getAll(req, function (err, items) { + if (err) { + res.status(items || 500).send(err.message) + } else { + res.status(200).json(items) + } + }) + } + ) + .post( + passport.authenticate(['basic-auth']), + function (req, res) { + const vegetableTypes = new VegetableTypes() + vegetableTypes.createOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + + router.route(itemPath) + .get( + function (req, res) { + VegetableTypes.getOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + .patch( + passport.authenticate(['basic-auth']), + function (req, res) { + const vegetableTypes = new VegetableTypes() + vegetableTypes.patchOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + .delete( + passport.authenticate(['basic-auth']), + function (req, res) { + const vegetableTypes = new VegetableTypes() + vegetableTypes.deleteOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + + return router +} diff --git a/routes/vegetables.js b/routes/vegetables.js new file mode 100644 index 0000000..c4e6c77 --- /dev/null +++ b/routes/vegetables.js @@ -0,0 +1,75 @@ +const express = require('express') +const router = express.Router() +const VegetableTypes = require('../middleware/Vegetables') + +module.exports = function (passport) { + const basePath = '/api/types/:vegetableTypesId/vegetables/' + const itemPath = basePath + ':vegetablesId' + + router.route(basePath) + .get( + function (req, res) { + VegetableTypes.getAll(req, function (err, items) { + if (err) { + res.status(items || 500).send(err.message) + } else { + res.status(200).json(items) + } + }) + } + ) + .post( + passport.authenticate(['basic-auth']), + function (req, res) { + const vegetableTypes = new VegetableTypes() + vegetableTypes.createOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + + router.route(itemPath) + .get( + function (req, res) { + VegetableTypes.getOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + .patch( + passport.authenticate(['basic-auth']), + function (req, res) { + const vegetableTypes = new VegetableTypes() + vegetableTypes.patchOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + .delete( + passport.authenticate(['basic-auth']), + function (req, res) { + const vegetableTypes = new VegetableTypes() + vegetableTypes.deleteOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + + return router +} diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..ebb5ebc --- /dev/null +++ b/run.sh @@ -0,0 +1,8 @@ +#! /bin/bash + +AWS_ACCESS_KEY_ID=AKIAJ67E5YL5KLB7MYQQ \ +AWS_SECRET_ACCESS_KEY=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 \ +AWS_BUCKET=cfa-nimes \ +AWS_BASEFOLDER= \ +AWS_URL=https://s3.eu-west-3.amazonaws.com/cfa-nimes/ \ +npm run dev diff --git a/seeders/20180907191459-createUsers.js b/seeders/20180907191459-createUsers.js new file mode 100644 index 0000000..12a373e --- /dev/null +++ b/seeders/20180907191459-createUsers.js @@ -0,0 +1,23 @@ + +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.bulkInsert('Users', [ + { + firstName: 'Damien', + lastName: 'Broqua', + email: 'contact@darkou.fr', + password: '$2a$10$J4M5xlpdvtEGBY6BQhYhHe9Kz1lr9zt6oJB9Wz8qgFaTXdg4w9RvO', // cfanimes + createdAt: new Date(), + updatedAt: new Date() + }, + { + firstName: 'Sharlotte', + lastName: 'Demerson', + email: 'charlotte.cecile@live.fr', + password: '$2a$10$J4M5xlpdvtEGBY6BQhYhHe9Kz1lr9zt6oJB9Wz8qgFaTXdg4w9RvO', // cfanimes + createdAt: new Date(), + updatedAt: new Date() + } + ], {}) + } +} From 60cd0f69ccdce6476bcb20f87bb262c9477a2209 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Sun, 9 Sep 2018 18:15:19 +0200 Subject: [PATCH 05/55] Some changes --- app.js | 20 ++++++++++++++++++++ middleware/VegetableTypes.js | 9 +++++++-- middleware/Vegetables.js | 3 ++- models/vegetables.js | 5 +++-- models/vegetables_types.js | 3 ++- routes/user.js | 22 ++++++++++++++++++++++ routes/vegetableTypes.js | 2 +- routes/vegetables.js | 2 +- 8 files changed, 58 insertions(+), 8 deletions(-) create mode 100644 routes/user.js diff --git a/app.js b/app.js index 2013f2c..92f448b 100644 --- a/app.js +++ b/app.js @@ -29,8 +29,28 @@ app.use(express.urlencoded({ extended: false })) app.use(cookieParser()) app.use(express.static(path.join(__dirname, 'public'))) +app.use('/', + /** + * Set defaults env for all routes + * @param {Object} req + * @param {Object} res + * @param {Object} next + */ + function (req, res, next) { + // Website you wish to allow to connect + res.setHeader('Access-Control-Allow-Origin', '*') + // Request methods you wish to allow + res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE') + // Request headers you wish to allow + res.setHeader('Access-Control-Allow-Headers', + 'Origin, X-Requested-With, Content-Type, Accept, Authorization, cache-control, pragma, If-Modified-Since') + // Pass to next layer of middleware + next() + }) + app.use('/', require('./routes/vegetableTypes')(passport)) app.use('/', require('./routes/vegetables')(passport)) +app.use('/', require('./routes/user')(passport)) app.use(function (req, res, next) { next(createError(404)) diff --git a/middleware/VegetableTypes.js b/middleware/VegetableTypes.js index b26255a..84d36be 100644 --- a/middleware/VegetableTypes.js +++ b/middleware/VegetableTypes.js @@ -5,7 +5,8 @@ class VegetableTypes { vegetableTypes.findAndCountAll({ order: [ ['name', 'ASC'] - ] + ], + include: ['Vegetables'] }) .then(items => { if (!items) { @@ -30,7 +31,11 @@ class VegetableTypes { } static getOne (req, callback) { - vegetableTypes.findById(Number(req.params.vegetableTypesId)) + vegetableTypes.findById( + req.params.vegetableTypesId, + { + include: ['Vegetables'] + }) .then(item => { if (!item) { callback(new Error('Item vegetable type not found'), 404) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index 2411fe8..e511475 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -83,6 +83,7 @@ class Vegetables { where: { vegetableTypeId: req.params.vegetableTypesId }, + include: ['Type'], order: [ ['name', 'ASC'] ] @@ -135,7 +136,7 @@ class Vegetables { vegetableTypeId: req.params.vegetableTypesId, id: req.params.vegetablesId }, - include: ['Type'] + include: ['Type', 'Pictures'] }) .then(item => { if (!item) { diff --git a/models/vegetables.js b/models/vegetables.js index 77b835b..55d8d41 100644 --- a/models/vegetables.js +++ b/models/vegetables.js @@ -12,12 +12,13 @@ module.exports = (sequelize, DataTypes) => { } }, {}) vegetables.associate = function (models) { - vegetables.hasOne(models.vegetableTypes, { + vegetables.belongsTo(models.vegetableTypes, { as: 'Type', - foreignKey: 'id' + foreignKey: 'vegetableTypeId' }) vegetables.hasMany(models.vegetablePictures, { as: 'Pictures', + foreignKey: 'vegetablesId', onDelete: 'cascade' }) } diff --git a/models/vegetables_types.js b/models/vegetables_types.js index 77c8449..99fc58c 100644 --- a/models/vegetables_types.js +++ b/models/vegetables_types.js @@ -5,7 +5,8 @@ module.exports = (sequelize, DataTypes) => { vegetableTypes.associate = function (models) { vegetableTypes.hasMany(models.vegetables, { as: 'Vegetables', - onDelete: 'cascade' + onDelete: 'cascade', + foreignKey: 'vegetableTypeId' }) } return vegetableTypes diff --git a/routes/user.js b/routes/user.js new file mode 100644 index 0000000..5ebad61 --- /dev/null +++ b/routes/user.js @@ -0,0 +1,22 @@ +const express = require('express') +const router = express.Router() + +module.exports = function (passport) { + router.route('/api/login/') + .post( + passport.authenticate(['basic-auth']), + function (req, res) { + res.status(200).send(req.user) + } + ) + + router.route('/api/me/') + .get( + passport.authenticate(['basic-auth']), + function (req, res) { + res.status(200).send(req.user) + } + ) + + return router +} diff --git a/routes/vegetableTypes.js b/routes/vegetableTypes.js index 4e50f49..501905b 100644 --- a/routes/vegetableTypes.js +++ b/routes/vegetableTypes.js @@ -26,7 +26,7 @@ module.exports = function (passport) { if (err) { res.status(item || 500).send(err.message) } else { - res.status(200).json(item) + res.status(201).json(item) } }) } diff --git a/routes/vegetables.js b/routes/vegetables.js index c4e6c77..44290fb 100644 --- a/routes/vegetables.js +++ b/routes/vegetables.js @@ -26,7 +26,7 @@ module.exports = function (passport) { if (err) { res.status(item || 500).send(err.message) } else { - res.status(200).json(item) + res.status(201).json(item) } }) } From 4c6f67029750a3e1c496dbc3fb00e96861810ffe Mon Sep 17 00:00:00 2001 From: dbroqua Date: Sun, 9 Sep 2018 22:44:51 +0200 Subject: [PATCH 06/55] Updated CORS --- app.js | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/app.js b/app.js index 92f448b..e1275be 100644 --- a/app.js +++ b/app.js @@ -30,21 +30,12 @@ app.use(cookieParser()) app.use(express.static(path.join(__dirname, 'public'))) app.use('/', - /** - * Set defaults env for all routes - * @param {Object} req - * @param {Object} res - * @param {Object} next - */ function (req, res, next) { - // Website you wish to allow to connect res.setHeader('Access-Control-Allow-Origin', '*') - // Request methods you wish to allow res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE') - // Request headers you wish to allow - res.setHeader('Access-Control-Allow-Headers', - 'Origin, X-Requested-With, Content-Type, Accept, Authorization, cache-control, pragma, If-Modified-Since') - // Pass to next layer of middleware + res.setHeader('Access-Control-Allow-Credentials', true) + res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization, cache-control, pragma, If-Modified-Since') + next() }) From ddce225376d4e478a26fc9a4b9a2a40e8fed2906 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Sun, 9 Sep 2018 22:56:53 +0200 Subject: [PATCH 07/55] Updated CORS --- app.js | 11 ++--------- package-lock.json | 9 +++++++++ package.json | 1 + 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/app.js b/app.js index e1275be..66e7fb4 100644 --- a/app.js +++ b/app.js @@ -5,6 +5,7 @@ const cookieParser = require('cookie-parser') const logger = require('morgan') const passport = require('passport') const session = require('express-session') +const cors = require('cors') const app = express() @@ -29,15 +30,7 @@ app.use(express.urlencoded({ extended: false })) app.use(cookieParser()) app.use(express.static(path.join(__dirname, 'public'))) -app.use('/', - function (req, res, next) { - res.setHeader('Access-Control-Allow-Origin', '*') - res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE') - res.setHeader('Access-Control-Allow-Credentials', true) - res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization, cache-control, pragma, If-Modified-Since') - - next() - }) +app.use(cors()) app.use('/', require('./routes/vegetableTypes')(passport)) app.use('/', require('./routes/vegetables')(passport)) diff --git a/package-lock.json b/package-lock.json index 8ebae44..a4fdfa8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1288,6 +1288,15 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "cors": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", + "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "crc": { "version": "3.4.4", "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", diff --git a/package.json b/package.json index 72a3eec..d1db477 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "aws-sdk": "^2.311.0", "bcrypt-nodejs": "0.0.3", "cookie-parser": "~1.4.3", + "cors": "^2.8.4", "debug": "~2.6.9", "express": "~4.16.0", "express-session": "^1.15.6", From 4b9bed892660ec5604fc7c053fa8cb50a11fc8c1 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Mon, 10 Sep 2018 10:14:56 +0200 Subject: [PATCH 08/55] Set produciton env --- config/config.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/config.json b/config/config.json index 5a6fb17..4b4354c 100644 --- a/config/config.json +++ b/config/config.json @@ -14,9 +14,9 @@ "dialect": "mysql" }, "production": { - "username": "root", - "password": null, - "database": "database_production", + "username": "cfanimes", + "password": "bdGGcaAoEeDgDkwG", + "database": "cfanimes", "host": "127.0.0.1", "dialect": "mysql" } From b3dc18e57dc5b9a4869ef0e1ed059999cc94e500 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Sun, 16 Sep 2018 23:46:39 +0200 Subject: [PATCH 09/55] Ajout de la galerie d'images --- middleware/Pictures.js | 191 ++++++++++++++++++ ...180907185320-create-vegetables_pictures.js | 2 +- models/vegetables.js | 2 +- models/vegetables_pictures.js | 9 +- routes/vegetables.js | 77 ++++++- 5 files changed, 265 insertions(+), 16 deletions(-) create mode 100644 middleware/Pictures.js diff --git a/middleware/Pictures.js b/middleware/Pictures.js new file mode 100644 index 0000000..0c8f6e2 --- /dev/null +++ b/middleware/Pictures.js @@ -0,0 +1,191 @@ +const pictures = require('../models').vegetablePictures +const multer = require('multer') +const Vegetables = require('./Vegetables') +const path = require('path') +const fs = require('fs') +const Aws = require('../libs/aws') +const uuid = require('uuid/v4') + +class Pictures { + constructor () { + this._upload = multer({ + storage: multer.diskStorage({}), + fileFilter: function (req, file, cb) { + const filetypes = /jpg|jpeg|png|JPG|JPEG|PNG/ + const mimetype = filetypes.test(file.mimetype) + const extname = filetypes.test(path.extname(file.originalname).toLowerCase()) + + if (mimetype && extname) { + return cb(null, true) + } + cb(new Error('Error: File upload only supports the following filetypes - ' + filetypes)) + } + }).single('picture') + } + + _reOrderPictures (position, vegetableId) { + pictures.findAll({ + where: { + vegetableId: vegetableId + } + }) + .then(items => { + items.forEach((item) => { + let itemPosition = item.order + if (itemPosition >= position) { + item.update({ order: itemPosition - 1 }) + .catch((e) => { + console.log(e) + }) + } + }) + }) + .catch((error) => { + console.log(error) + }) + } + + static getAll (req, callback) { + Vegetables.getOne(req, (err, item) => { + if (err) { + callback(err, item) + return false + } + + pictures.findAndCountAll({ + where: { + vegetableId: req.params.vegetablesId + }, + order: [ + ['order', 'ASC'] + ] + }) + .then(items => { + if (!items) { + callback(new Error('No picture found'), 204) + return false + } + callback(null, items) + }) + .catch((e) => { + callback(e, null) + }) + }) + } + + static getOne (req, callback) { + Vegetables.getOne(req, (err, item) => { + if (err) { + callback(err, item) + return false + } + + pictures.find({ + where: { + id: req.params.pictureId, + vegetableId: req.params.vegetablesId + }, + order: [ + ['order', 'ASC'] + ] + }) + .then(item => { + if (!item) { + callback(new Error('Picture not found'), 404) + return false + } + callback(null, item) + }) + .catch((e) => { + callback(e, null) + }) + }) + } + + createOne (req, callback) { + Vegetables.getOne(req, (err, item) => { + if (err) { + callback(err, item) + return false + } + + Pictures.getAll(req, (err, items) => { + if (err) { + callback(err, item) + return false + } + + const order = items.count + 1 + + this._upload(req, req.body, (err) => { + if (err) { + callback(err, null) + return false + } + + if (req.file) { + let aws = new Aws() + aws.upload({ + path: req.file.path, + filename: `picture_${req.params.vegetablesId}_${uuid()}.${req.file.originalname.split('.')[req.file.originalname.split('.').length - 1]}` + }, (err, res) => { + if (err) { callback(err, null) } + + pictures.create({ + order: order, + url: res.file, + vegetableId: req.params.vegetablesId + }) + .then(item => { + callback(null, item) + }) + .catch(e => { + callback(e, null) + }) + fs.unlink(req.file.path, () => {}) + }) + } else { + callback(new Error('No file sent'), 406) + } + }) + }) + }) + } + + deleteOne (req, callback) { + Pictures.getOne(req, (err, item) => { + if (err) { + callback(err, item) + return false + } + + const aws = new Aws() + + aws.deleteObjects([item.url], (err) => { + if (err) { + callback(err, null) + return false + } + + pictures.destroy({ + where: { + id: req.params.pictureId + } + }) + .then(deleted => { + if (deleted === 0) { + callback(new Error('Error when trying to delete item')) + return false + } + + callback(null, null) + }) + .catch(e => { + callback(e, null) + }) + }) + }) + } +} + +module.exports = Pictures diff --git a/migrations/20180907185320-create-vegetables_pictures.js b/migrations/20180907185320-create-vegetables_pictures.js index c0e4b1a..eebcbd7 100644 --- a/migrations/20180907185320-create-vegetables_pictures.js +++ b/migrations/20180907185320-create-vegetables_pictures.js @@ -13,7 +13,7 @@ module.exports = { order: { type: Sequelize.INTEGER }, - vegetablesId: { + vegetableId: { type: Sequelize.INTEGER, references: { model: 'vegetables', key: 'id' } }, diff --git a/models/vegetables.js b/models/vegetables.js index 55d8d41..157f3d4 100644 --- a/models/vegetables.js +++ b/models/vegetables.js @@ -18,7 +18,7 @@ module.exports = (sequelize, DataTypes) => { }) vegetables.hasMany(models.vegetablePictures, { as: 'Pictures', - foreignKey: 'vegetablesId', + foreignKey: 'vegetableId', onDelete: 'cascade' }) } diff --git a/models/vegetables_pictures.js b/models/vegetables_pictures.js index 52a600b..846e53d 100644 --- a/models/vegetables_pictures.js +++ b/models/vegetables_pictures.js @@ -2,14 +2,17 @@ module.exports = (sequelize, DataTypes) => { const vegetablePictures = sequelize.define('vegetablePictures', { url: DataTypes.STRING, order: DataTypes.INTEGER, - vegetablesId: { + vegetableId: { type: DataTypes.INTEGER, references: 'vegetables', referencesKey: 'id' } }, {}) - vegetablePictures.associate = function (models) { - vegetablePictures.hasOne(models.vegetables, { as: 'Vegetables', foreignKey: 'id' }) + vegetablePictures.associate = function(models) { + vegetablePictures.hasOne(models.vegetables, { + as: 'Vegetables', + foreignKey: 'id' + }) } return vegetablePictures } diff --git a/routes/vegetables.js b/routes/vegetables.js index 44290fb..1db5eb9 100644 --- a/routes/vegetables.js +++ b/routes/vegetables.js @@ -1,15 +1,18 @@ const express = require('express') const router = express.Router() -const VegetableTypes = require('../middleware/Vegetables') +const Vegetables = require('../middleware/Vegetables') +const Pictures = require('../middleware/Pictures') module.exports = function (passport) { - const basePath = '/api/types/:vegetableTypesId/vegetables/' - const itemPath = basePath + ':vegetablesId' + const basePath = '/api/types/:vegetableTypesId/vegetables' + const itemPath = basePath + '/:vegetablesId' + const picturesPath = itemPath + '/pictures' + const picturePath = picturesPath + '/:pictureId' router.route(basePath) .get( function (req, res) { - VegetableTypes.getAll(req, function (err, items) { + Vegetables.getAll(req, function (err, items) { if (err) { res.status(items || 500).send(err.message) } else { @@ -21,8 +24,8 @@ module.exports = function (passport) { .post( passport.authenticate(['basic-auth']), function (req, res) { - const vegetableTypes = new VegetableTypes() - vegetableTypes.createOne(req, function (err, item) { + const vegetable = new Vegetables() + vegetable.createOne(req, function (err, item) { if (err) { res.status(item || 500).send(err.message) } else { @@ -35,7 +38,7 @@ module.exports = function (passport) { router.route(itemPath) .get( function (req, res) { - VegetableTypes.getOne(req, function (err, item) { + Vegetables.getOne(req, function (err, item) { if (err) { res.status(item || 500).send(err.message) } else { @@ -47,8 +50,8 @@ module.exports = function (passport) { .patch( passport.authenticate(['basic-auth']), function (req, res) { - const vegetableTypes = new VegetableTypes() - vegetableTypes.patchOne(req, function (err, item) { + const vegetable = new Vegetables() + vegetable.patchOne(req, function (err, item) { if (err) { res.status(item || 500).send(err.message) } else { @@ -60,8 +63,60 @@ module.exports = function (passport) { .delete( passport.authenticate(['basic-auth']), function (req, res) { - const vegetableTypes = new VegetableTypes() - vegetableTypes.deleteOne(req, function (err, item) { + const vegetable = new Vegetables() + vegetable.deleteOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + + router.route(picturesPath) + .get( + function (req, res) { + Pictures.getAll(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + .post( + passport.authenticate(['basic-auth']), + function (req, res) { + const picture = new Pictures() + picture.createOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(201).json(item) + } + }) + } + ) + + router.route(picturePath) + .get( + function (req, res) { + Pictures.getOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + .delete( + passport.authenticate(['basic-auth']), + function (req, res) { + const picture = new Pictures() + picture.deleteOne(req, function (err, item) { if (err) { res.status(item || 500).send(err.message) } else { From 405d908a099005c7957757901de23ea79a3874ea Mon Sep 17 00:00:00 2001 From: dbroqua Date: Wed, 19 Sep 2018 21:49:02 +0200 Subject: [PATCH 10/55] Added resize lib --- libs/aws.js | 21 +- libs/resize.js | 62 +++++ middleware/Pictures.js | 73 +++-- package-lock.json | 603 ++++++++++++++++++++++++++++++++++++++++- package.json | 1 + 5 files changed, 725 insertions(+), 35 deletions(-) create mode 100644 libs/resize.js diff --git a/libs/aws.js b/libs/aws.js index 714f4fd..9065ad9 100644 --- a/libs/aws.js +++ b/libs/aws.js @@ -53,7 +53,9 @@ class Aws { const file = await imagemin([newFile], '/tmp', { plugins: [ imageminJpegtran(), - imageminPngquant({ quality: '65-80' }) + imageminPngquant({ + quality: '65-80' + }) ] }) @@ -69,10 +71,10 @@ class Aws { } /** - * Upload file on s3 - * @param {Object} params {path: String, filename: String} - * @param {Function} callback - */ + * Upload file on s3 + * @param {Object} params {path: String, filename: String} + * @param {Function} callback + */ upload (params, callback) { fs.readFile(params.path, (err, data) => { if (err) { @@ -91,7 +93,9 @@ class Aws { files.forEach((file) => { if (file) { - items.push({ Key: file.replace(basePath, '') }) + items.push({ + Key: file.replace(basePath, '') + }) } }) @@ -103,7 +107,10 @@ class Aws { } }, callback) } else { - callback(null, { code: 200, res: 'No file deleted' }) + callback(null, { + code: 200, + res: 'No file deleted' + }) } } } diff --git a/libs/resize.js b/libs/resize.js new file mode 100644 index 0000000..43b4917 --- /dev/null +++ b/libs/resize.js @@ -0,0 +1,62 @@ +const fs = require('fs') +const resizeImg = require('resize-img') + +class Resize { + constructor (width, heigth) { + this.size = { + width: 128, + heigth: 128 + } + + if (width && heigth) { + this.setSize(width, heigth) + } + } + + _createOutputFilename (input) { + return `${input}_${this.size.width}x${this.size.heigth}` + } + + _resize (input, output, callback) { + fs.readFile(input, (err, data) => { + if (err) { + callback(err, null) + return false + } + + resizeImg(data, this.size).then(buf => { + fs.writeFile(output, buf, (err) => { + if (err) { + callback(err, null) + return false + } + callback(null, { input: input, output: output, size: this.size }) + }) + }) + }) + } + + setSize (width, heigth) { + this.size = { + width: width, + heigth: heigth + } + } + + createThumbnail (file, callback) { + this.setSize(128, 128) + this._resize(file, this._createOutputFilename(file), callback) + } + + createLargeImage (file, callback) { + this.setSize(1600, 1200) + this._resize(file, this._createOutputFilename(file), callback) + } + + resize (file, width, heigth, callback) { + this.setSize(width, heigth) + this._resize(file, this._createOutputFilename(file), callback) + } +} + +module.exports = Resize diff --git a/middleware/Pictures.js b/middleware/Pictures.js index 0c8f6e2..d9fcd15 100644 --- a/middleware/Pictures.js +++ b/middleware/Pictures.js @@ -4,6 +4,7 @@ const Vegetables = require('./Vegetables') const path = require('path') const fs = require('fs') const Aws = require('../libs/aws') +const Resize = require('../libs/resize') const uuid = require('uuid/v4') class Pictures { @@ -102,6 +103,23 @@ class Pictures { }) } + _createOne (req, callback) { + pictures.create({ + order: req.body.order, + url: req.body.url, + vegetableId: req.params.vegetablesId + }) + .then(item => { + console.log('ici') + callback(null, item) + }) + .catch(e => { + console.log(e) + callback(e, null) + }) + fs.unlink(req.file.path, () => {}) + } + createOne (req, callback) { Vegetables.getOne(req, (err, item) => { if (err) { @@ -124,25 +142,46 @@ class Pictures { } if (req.file) { + const key = uuid() let aws = new Aws() - aws.upload({ - path: req.file.path, - filename: `picture_${req.params.vegetablesId}_${uuid()}.${req.file.originalname.split('.')[req.file.originalname.split('.').length - 1]}` - }, (err, res) => { - if (err) { callback(err, null) } + let resize = new Resize() - pictures.create({ - order: order, - url: res.file, - vegetableId: req.params.vegetablesId + resize.createLargeImage(req.file.path, (err, large) => { + if (err) { + callback(err, null) + return false + } + + aws.upload({ + path: large.output, + filename: `picture_${req.params.vegetablesId}_${key}_large.${req.file.originalname.split('.')[req.file.originalname.split('.').length - 1]}` + }, (err, res) => { + if (err) { callback(err, null) } + + req.body = { + order: order, + url: res.file + } + + fs.unlink(large.output, () => {}) + + resize.createThumbnail(req.file.path, (err, file) => { + if (err) { + callback(err, null) + return false + } + + aws.upload({ + path: file.output, + filename: `picture_${req.params.vegetablesId}_${key}_thumb.${req.file.originalname.split('.')[req.file.originalname.split('.').length - 1]}` + }, (err, res) => { + if (err) { callback(err, null) } + + this._createOne(req, callback) + fs.unlink(file.output, () => {}) + }) + }) }) - .then(item => { - callback(null, item) - }) - .catch(e => { - callback(e, null) - }) - fs.unlink(req.file.path, () => {}) }) } else { callback(new Error('No file sent'), 406) @@ -161,7 +200,7 @@ class Pictures { const aws = new Aws() - aws.deleteObjects([item.url], (err) => { + aws.deleteObjects([item.url, item.url.replace('_large.', '_tumb.')], (err) => { if (err) { callback(err, null) return false diff --git a/package-lock.json b/package-lock.json index a4fdfa8..7c92b42 100644 --- a/package-lock.json +++ b/package-lock.json @@ -384,6 +384,19 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -421,6 +434,11 @@ "async-done": "^1.2.2" } }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -449,6 +467,16 @@ } } }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -569,11 +597,25 @@ "resolved": "https://registry.npmjs.org/bcrypt-nodejs/-/bcrypt-nodejs-0.0.3.tgz", "integrity": "sha1-xgkX8m3CNWYVZsaBBhwwPCsohCs=" }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, "beeper": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=" }, + "bignumber.js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz", + "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=" + }, "bin-build": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz", @@ -676,6 +718,11 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz", "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==" }, + "bmp-js": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.0.1.tgz", + "integrity": "sha1-WtAUcJnROp84qnuZrx1ueGZu038=" + }, "body-parser": { "version": "1.18.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", @@ -935,6 +982,11 @@ "redeyed": "~2.1.0" } }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, "caw": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz", @@ -1166,6 +1218,14 @@ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, "commander": { "version": "2.8.1", "resolved": "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz", @@ -1339,6 +1399,14 @@ "es5-ext": "^0.10.9" } }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, "dateformat": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", @@ -1947,6 +2015,11 @@ "rimraf": "^2.2.8" } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, "denque": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/denque/-/denque-1.3.0.tgz", @@ -2038,6 +2111,11 @@ "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + }, "dottie": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.0.tgz", @@ -2327,6 +2405,16 @@ "object.defaults": "^1.1.0" } }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -2375,6 +2463,11 @@ "es6-symbol": "^3.1.1" } }, + "es6-promise": { + "version": "3.3.1", + "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=" + }, "es6-symbol": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", @@ -2759,6 +2852,11 @@ "meow": "^3.1.0" } }, + "exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -3018,6 +3116,11 @@ } } }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, "fancy-log": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", @@ -3050,8 +3153,7 @@ "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "fast-levenshtein": { "version": "2.0.6", @@ -3235,6 +3337,14 @@ "readable-stream": "^2.0.4" } }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -3249,6 +3359,31 @@ "for-in": "^1.0.1" } }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.6", + "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "~1.0.0" + } + } + } + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -3328,12 +3463,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": 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" @@ -3348,17 +3485,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -3475,7 +3615,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -3487,6 +3628,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -3501,6 +3643,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3508,12 +3651,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -3532,6 +3677,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -3612,7 +3758,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -3624,6 +3771,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -3745,6 +3893,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -3869,6 +4018,14 @@ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -3968,6 +4125,15 @@ "object.defaults": "^1.1.0" } }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "requires": { + "min-document": "^2.19.0", + "process": "~0.5.1" + } + }, "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", @@ -4325,6 +4491,48 @@ "glogg": "^1.0.0" } }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", + "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", + "requires": { + "ajv": "^5.3.0", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + } + } + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -4435,6 +4643,16 @@ "statuses": ">= 1.4.0 < 2" } }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, "iconv-lite": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", @@ -4663,6 +4881,11 @@ "resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz", "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=" }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -4741,6 +4964,11 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, + "is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" + }, "is-glob": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", @@ -4893,6 +5121,11 @@ "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz", "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=" }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, "is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", @@ -4943,6 +5176,11 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, "isurl": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", @@ -4952,11 +5190,56 @@ "is-object": "^1.0.1" } }, + "jimp": { + "version": "0.2.28", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.2.28.tgz", + "integrity": "sha1-3VKak3GQ9ClXp5N9Gsw6d2KZbqI=", + "requires": { + "bignumber.js": "^2.1.0", + "bmp-js": "0.0.3", + "es6-promise": "^3.0.2", + "exif-parser": "^0.1.9", + "file-type": "^3.1.0", + "jpeg-js": "^0.2.0", + "load-bmfont": "^1.2.3", + "mime": "^1.3.4", + "mkdirp": "0.5.1", + "pixelmatch": "^4.0.0", + "pngjs": "^3.0.0", + "read-chunk": "^1.0.1", + "request": "^2.65.0", + "stream-to-buffer": "^0.1.0", + "tinycolor2": "^1.1.2", + "url-regex": "^3.0.0" + }, + "dependencies": { + "bmp-js": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.0.3.tgz", + "integrity": "sha1-ZBE+nHzxICs3btYHvzBibr5XsYo=" + }, + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + }, + "jpeg-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.2.0.tgz", + "integrity": "sha1-U+RI7J0mPmgyZkZ+lELSxaLvVII=" + } + } + }, "jmespath": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" }, + "jpeg-js": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.1.2.tgz", + "integrity": "sha1-E1uZLAV1yYXPoPSUoyJ+0jhYPs4=" + }, "jpegtran-bin": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-3.2.0.tgz", @@ -4988,6 +5271,17 @@ "esprima": "^4.0.0" } }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -5008,11 +5302,27 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, "jstransformer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", @@ -5108,6 +5418,28 @@ "resolve": "^1.1.7" } }, + "load-bmfont": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz", + "integrity": "sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==", + "requires": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + }, + "dependencies": { + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" + } + } + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -5496,6 +5828,14 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" + } + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -5787,6 +6127,11 @@ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6045,6 +6390,25 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" + }, + "parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" + }, + "parse-bmfont-xml": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", + "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", + "requires": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, "parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", @@ -6082,6 +6446,15 @@ } } }, + "parse-headers": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz", + "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=", + "requires": { + "for-each": "^0.3.2", + "trim": "0.0.1" + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -6096,6 +6469,14 @@ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", "dev": true }, + "parse-png": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-1.1.2.tgz", + "integrity": "sha1-9cKtfHmTSQmGAgooTBmu5FlxH/I=", + "requires": { + "pngjs": "^3.2.0" + } + }, "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", @@ -6202,6 +6583,16 @@ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "phin": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.2.tgz", + "integrity": "sha512-j+UOz1qs+k8NlBRws2IF+Qd+YsVKcqIjvYPBEP9IpmhyvLvyN6GTuqsGbsqH3fIgHufqVqLQSttidIgshkgT7w==" + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -6220,6 +6611,14 @@ "pinkie": "^2.0.0" } }, + "pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", + "requires": { + "pngjs": "^3.0.0" + } + }, "pkg-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", @@ -6235,6 +6634,11 @@ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", "dev": true }, + "pngjs": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.3.3.tgz", + "integrity": "sha512-1n3Z4p3IOxArEs1VRXnZ/RXdfEniAUS9jb68g58FIXMNkPJeZd+Qh4Uq7/e0LVxAQGos1eIUrqrt4FpjdnEd+Q==" + }, "pngquant-bin": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-5.0.0.tgz", @@ -6555,6 +6959,11 @@ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", "dev": true }, + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", @@ -6594,6 +7003,11 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, + "psl": { + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" + }, "pug": { "version": "2.0.0-beta11", "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.0-beta11.tgz", @@ -6838,6 +7252,11 @@ "readable-stream": "^2.0.0" } }, + "read-chunk": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-1.0.1.tgz", + "integrity": "sha1-X2jKswfmY/GZk1J9m1icrORmEZQ=" + }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", @@ -7004,6 +7423,53 @@ "remove-trailing-separator": "^1.1.0" } }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + } + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -7026,6 +7492,35 @@ "resolve-from": "^1.0.0" } }, + "resize-img": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/resize-img/-/resize-img-1.1.2.tgz", + "integrity": "sha1-+tZQ+vPvLFPqYxErwnLZXp2SVQ4=", + "requires": { + "bmp-js": "0.0.1", + "file-type": "^3.8.0", + "get-stream": "^2.0.0", + "jimp": "^0.2.21", + "jpeg-js": "^0.1.1", + "parse-png": "^1.1.1" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + } + } + }, "resolve": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", @@ -7138,8 +7633,7 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sax": { "version": "1.2.1", @@ -7562,6 +8056,22 @@ } } }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -7617,6 +8127,19 @@ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" }, + "stream-to": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-to/-/stream-to-0.2.2.tgz", + "integrity": "sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0=" + }, + "stream-to-buffer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz", + "integrity": "sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk=", + "requires": { + "stream-to": "~0.2.0" + } + }, "streamsearch": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", @@ -7922,6 +8445,11 @@ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=" }, + "tinycolor2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", + "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -7998,6 +8526,27 @@ "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", @@ -8022,6 +8571,12 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -8334,6 +8889,16 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "vinyl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", @@ -8520,6 +9085,22 @@ "mkdirp": "^0.5.1" } }, + "xhr": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", + "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", + "requires": { + "global": "~4.3.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" + }, "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", diff --git a/package.json b/package.json index d1db477..42e434b 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "passport": "^0.4.0", "passport-http": "^0.3.0", "pug": "2.0.0-beta11", + "resize-img": "^1.1.2", "sequelize": "^4.38.0", "uuid": "^3.3.2" }, From e4f06185fe9a480366b58b923e0f0dfa428c8cb2 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Wed, 19 Sep 2018 22:08:11 +0200 Subject: [PATCH 11/55] Updated Vegetables pictures --- middleware/Vegetables.js | 110 +++++++++++++++++++++++++++++++++------ 1 file changed, 93 insertions(+), 17 deletions(-) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index e511475..84f7024 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -4,6 +4,7 @@ const uuid = require('uuid/v4') const multer = require('multer') const path = require('path') const fs = require('fs') +const Resize = require('../libs/resize') const Aws = require('../libs/aws') class Vegetables { @@ -75,7 +76,7 @@ class Vegetables { } } - aws.deleteObjects([path], callback) + aws.deleteObjects([path, path.replace('_large.', '_thumb.')], callback) } static getAll (req, callback) { @@ -114,14 +115,53 @@ class Vegetables { } if (req.file) { + let uploaded = 0 let aws = new Aws() - aws.upload({ - path: req.file.path, - filename: `main_${uuid()}.${req.file.originalname.split('.')[req.file.originalname.split('.').length - 1]}` - }, (err, res) => { - if (!err) { req.body.mainPicture = res.file } - this._createItem(req, callback) - fs.unlink(req.file.path, () => {}) + let thumb = new Resize() + let large = new Resize() + const key = uuid() + let _create = function () { + if (uploaded === 2) { + this._createItem(req, callback) + fs.unlink(req.file.path, () => {}) + } + } + + large.createLargeImage(req.file.path, (err, file) => { + if (err) { + callback(err, null) + return false + } + + aws.upload({ + path: file.output, + filename: `main_${key}_large.${req.file.originalname.split('.')[req.file.originalname.split('.').length - 1]}` + }, (err, res) => { + if (!err) { + req.body.mainPicture = res.file + uploaded += 1 + _create() + fs.unlink(file.output, () => {}) + } + }) + }) + + thumb.createLargeImage(req.file.path, (err, file) => { + if (err) { + callback(err, null) + return false + } + + aws.upload({ + path: file.output, + filename: `main_${key}_thumb.${req.file.originalname.split('.')[req.file.originalname.split('.').length - 1]}` + }, (err, res) => { + if (!err) { + uploaded += 1 + _create() + fs.unlink(file.output, () => {}) + } + }) }) } else { this._createItem(req, callback) @@ -166,21 +206,58 @@ class Vegetables { let values = req.body if (req.file) { + let uploaded = 0 let aws = new Aws() + let thumb = new Resize() + let large = new Resize() + const key = uuid() if (item.mainPicture !== null && item.mainPicture !== '') { this._deleteMedias(item.mainPicture) } - aws.upload({ - path: req.file.path, - filename: `main_${req.params.vegetablesId}${path.extname(req.file.originalname).toLowerCase()}` - }, (err, res) => { - if (!err) { - values.mainPicture = res.file + let _patch = function () { + if (uploaded === 2) { + this._patchOne(item, values, callback) + fs.unlink(req.file.path, () => {}) } - this._patchOne(item, values, callback) - fs.unlink(req.file.path, () => {}) + } + + large.createLargeImage(req.file.path, (err, file) => { + if (err) { + callback(err, null) + return false + } + + aws.upload({ + path: file.output, + filename: `main_${key}_large.${req.file.originalname.split('.')[req.file.originalname.split('.').length - 1]}` + }, (err, res) => { + if (!err) { + values.mainPicture = res.file + uploaded += 1 + _patch() + fs.unlink(file.output, () => {}) + } + }) + }) + + thumb.createLargeImage(req.file.path, (err, file) => { + if (err) { + callback(err, null) + return false + } + + aws.upload({ + path: file.output, + filename: `main_${key}_thumb.${req.file.originalname.split('.')[req.file.originalname.split('.').length - 1]}` + }, (err, res) => { + if (!err) { + uploaded += 1 + _patch() + fs.unlink(file.output, () => {}) + } + }) }) } else { this._patchOne(item, values, callback) @@ -197,7 +274,6 @@ class Vegetables { } if (item.mainPicture !== null && item.mainPicture !== '') { - const aws = new Aws() if (!callback) { callback = (e) => { if (e) { From ca364f202e3f1560d1c5a81fc5375550d0d78bbf Mon Sep 17 00:00:00 2001 From: dbroqua Date: Wed, 19 Sep 2018 22:12:42 +0200 Subject: [PATCH 12/55] Fixed bug --- middleware/Vegetables.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index 84f7024..5573660 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -120,7 +120,7 @@ class Vegetables { let thumb = new Resize() let large = new Resize() const key = uuid() - let _create = function () { + let _create = () => { if (uploaded === 2) { this._createItem(req, callback) fs.unlink(req.file.path, () => {}) @@ -216,7 +216,7 @@ class Vegetables { this._deleteMedias(item.mainPicture) } - let _patch = function () { + let _patch = () => { if (uploaded === 2) { this._patchOne(item, values, callback) fs.unlink(req.file.path, () => {}) From 8dab5968c34da696ee66c5d48f94581511cd2c9b Mon Sep 17 00:00:00 2001 From: dbroqua Date: Wed, 19 Sep 2018 22:15:00 +0200 Subject: [PATCH 13/55] Debug --- middleware/Vegetables.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index 5573660..695ce1a 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -146,7 +146,7 @@ class Vegetables { }) }) - thumb.createLargeImage(req.file.path, (err, file) => { + thumb.createThumbnail(req.file.path, (err, file) => { if (err) { callback(err, null) return false @@ -242,7 +242,7 @@ class Vegetables { }) }) - thumb.createLargeImage(req.file.path, (err, file) => { + thumb.createThumbnail(req.file.path, (err, file) => { if (err) { callback(err, null) return false From 90f4f688ebc32d86348117f9a494c23f332d9da9 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 20 Sep 2018 15:06:21 +0200 Subject: [PATCH 14/55] Test --- .ebextensions/00_change_npm_permissions.config | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .ebextensions/00_change_npm_permissions.config diff --git a/.ebextensions/00_change_npm_permissions.config b/.ebextensions/00_change_npm_permissions.config new file mode 100644 index 0000000..2e9fd78 --- /dev/null +++ b/.ebextensions/00_change_npm_permissions.config @@ -0,0 +1,8 @@ +files: + "/opt/elasticbeanstalk/hooks/appdeploy/post/00_set_tmp_permissions.sh": + mode: "000755" + owner: root + group: root + content: | + #!/usr/bin/env bash + chown -R nodejs:nodejs /tmp/.npm From 745bdab14506cce8b89f74434fee93c6e513890c Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 20 Sep 2018 15:11:53 +0200 Subject: [PATCH 15/55] Debug test --- .ebextensions/00_change_npm_permissions.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ebextensions/00_change_npm_permissions.config b/.ebextensions/00_change_npm_permissions.config index 2e9fd78..e284987 100644 --- a/.ebextensions/00_change_npm_permissions.config +++ b/.ebextensions/00_change_npm_permissions.config @@ -5,4 +5,4 @@ files: group: root content: | #!/usr/bin/env bash - chown -R nodejs:nodejs /tmp/.npm + chown -R nodejs:nodejs /tmp/.npm /tmp/deployment From defd3cf8a0cc5817294e6bfa660b46f650121dc4 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 20 Sep 2018 15:16:06 +0200 Subject: [PATCH 16/55] DEBUG --- .ebextensions/00_change_npm_permissions.config | 1 + 1 file changed, 1 insertion(+) diff --git a/.ebextensions/00_change_npm_permissions.config b/.ebextensions/00_change_npm_permissions.config index e284987..7a2434a 100644 --- a/.ebextensions/00_change_npm_permissions.config +++ b/.ebextensions/00_change_npm_permissions.config @@ -6,3 +6,4 @@ files: content: | #!/usr/bin/env bash chown -R nodejs:nodejs /tmp/.npm /tmp/deployment + chmod -R 777 /tmp/.npm /tmp/deployment From 56ddad5ae9a5daa9e3934fe7409542e774c9675a Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 20 Sep 2018 15:22:46 +0200 Subject: [PATCH 17/55] DEBUG --- .ebextensions/00_deploy_npm.config | 37 ++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 .ebextensions/00_deploy_npm.config diff --git a/.ebextensions/00_deploy_npm.config b/.ebextensions/00_deploy_npm.config new file mode 100644 index 0000000..901cd2e --- /dev/null +++ b/.ebextensions/00_deploy_npm.config @@ -0,0 +1,37 @@ +files: + "/opt/elasticbeanstalk/env.vars" : + mode: "000775" + owner: root + group: users + content: | + export NPM_CONFIG_LOGLEVEL=error + export NODE_PATH=`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin + "/opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh" : + mode: "000775" + owner: root + group: users + content: | + #!/bin/bash + . /opt/elasticbeanstalk/env.vars + function error_exit + { + eventHelper.py --msg "$1" --severity ERROR + exit $2 + } + + #install not-installed yet app node_modules + if [ ! -d "/var/node_modules" ]; then + mkdir /var/node_modules ; + fi + if [ -d /tmp/deployment/application ]; then + ln -s /var/node_modules /tmp/deployment/application/ + fi + + OUT=$([ -d "/tmp/deployment/application" ] && cd /tmp/deployment/application && $NODE_PATH/npm install 2>&1) || error_exit "Failed to run npm install. $OUT" $? + echo $OUT + "/opt/elasticbeanstalk/hooks/configdeploy/pre/50npm.sh" : + mode: "000666" + owner: root + group: users + content: | + #no need to run npm install during configdeploy From a737f4843398ba72818135b2d6039696bfcaead9 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 20 Sep 2018 15:27:37 +0200 Subject: [PATCH 18/55] Debug AWS --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 42e434b..949a4a8 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "scripts": { - "start": "node ./bin/www", + "start": "nodejs ./bin/www", "dev": "DEBUG=myapp:* nodemon" }, "dependencies": { From 2397868a5e8b490484ae8d5bdf6cdd027bae8d25 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Tue, 2 Oct 2018 07:58:15 +0200 Subject: [PATCH 19/55] Removed useless directory --- .../00_change_npm_permissions.config | 9 ----- .ebextensions/00_deploy_npm.config | 37 ------------------- 2 files changed, 46 deletions(-) delete mode 100644 .ebextensions/00_change_npm_permissions.config delete mode 100644 .ebextensions/00_deploy_npm.config diff --git a/.ebextensions/00_change_npm_permissions.config b/.ebextensions/00_change_npm_permissions.config deleted file mode 100644 index 7a2434a..0000000 --- a/.ebextensions/00_change_npm_permissions.config +++ /dev/null @@ -1,9 +0,0 @@ -files: - "/opt/elasticbeanstalk/hooks/appdeploy/post/00_set_tmp_permissions.sh": - mode: "000755" - owner: root - group: root - content: | - #!/usr/bin/env bash - chown -R nodejs:nodejs /tmp/.npm /tmp/deployment - chmod -R 777 /tmp/.npm /tmp/deployment diff --git a/.ebextensions/00_deploy_npm.config b/.ebextensions/00_deploy_npm.config deleted file mode 100644 index 901cd2e..0000000 --- a/.ebextensions/00_deploy_npm.config +++ /dev/null @@ -1,37 +0,0 @@ -files: - "/opt/elasticbeanstalk/env.vars" : - mode: "000775" - owner: root - group: users - content: | - export NPM_CONFIG_LOGLEVEL=error - export NODE_PATH=`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin - "/opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh" : - mode: "000775" - owner: root - group: users - content: | - #!/bin/bash - . /opt/elasticbeanstalk/env.vars - function error_exit - { - eventHelper.py --msg "$1" --severity ERROR - exit $2 - } - - #install not-installed yet app node_modules - if [ ! -d "/var/node_modules" ]; then - mkdir /var/node_modules ; - fi - if [ -d /tmp/deployment/application ]; then - ln -s /var/node_modules /tmp/deployment/application/ - fi - - OUT=$([ -d "/tmp/deployment/application" ] && cd /tmp/deployment/application && $NODE_PATH/npm install 2>&1) || error_exit "Failed to run npm install. $OUT" $? - echo $OUT - "/opt/elasticbeanstalk/hooks/configdeploy/pre/50npm.sh" : - mode: "000666" - owner: root - group: users - content: | - #no need to run npm install during configdeploy From c9652c1366bef62463747669c5064c75330b85b6 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Tue, 2 Oct 2018 07:58:26 +0200 Subject: [PATCH 20/55] Reduced size for large image --- libs/resize.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/resize.js b/libs/resize.js index 43b4917..24ba3bf 100644 --- a/libs/resize.js +++ b/libs/resize.js @@ -49,7 +49,7 @@ class Resize { } createLargeImage (file, callback) { - this.setSize(1600, 1200) + this.setSize(1200, 900) this._resize(file, this._createOutputFilename(file), callback) } From 6d94b5f60c41ca1103a0921091645a1df9093161 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Tue, 2 Oct 2018 19:18:05 +0200 Subject: [PATCH 21/55] Added Properties to Vegetable --- app.js | 1 + middleware/Properties.js | 92 +++++++++++++++++++ middleware/Vegetables.js | 11 ++- .../20181002071412-create-properties.js | 27 ++++++ ...81002073641-create-vegetable-properties.js | 32 +++++++ models/properties.js | 9 ++ models/vegetable_properties.js | 26 ++++++ models/vegetables.js | 5 + routes/properties.js | 75 +++++++++++++++ 9 files changed, 277 insertions(+), 1 deletion(-) create mode 100644 middleware/Properties.js create mode 100644 migrations/20181002071412-create-properties.js create mode 100644 migrations/20181002073641-create-vegetable-properties.js create mode 100644 models/properties.js create mode 100644 models/vegetable_properties.js create mode 100644 routes/properties.js diff --git a/app.js b/app.js index 66e7fb4..2cd3c09 100644 --- a/app.js +++ b/app.js @@ -34,6 +34,7 @@ app.use(cors()) app.use('/', require('./routes/vegetableTypes')(passport)) app.use('/', require('./routes/vegetables')(passport)) +app.use('/', require('./routes/properties')(passport)) app.use('/', require('./routes/user')(passport)) app.use(function (req, res, next) { diff --git a/middleware/Properties.js b/middleware/Properties.js new file mode 100644 index 0000000..b26a0ab --- /dev/null +++ b/middleware/Properties.js @@ -0,0 +1,92 @@ +const properties = require('../models').properties + +class Properties { + static getAll (req, callback) { + properties.findAndCountAll({ + order: [ + ['name', 'ASC'] + ] + }) + .then(items => { + if (!items) { + callback(new Error('No property found'), 204) + return false + } + callback(null, items) + }) + .catch((e) => { + callback(e, null) + }) + } + + createOne (req, callback) { + properties.create(req.body) + .then(item => { + callback(null, item) + }) + .catch(e => { + callback(e, null) + }) + } + + static getOne (req, callback) { + properties.findById( + req.params.propertyId + ) + .then(item => { + if (!item) { + callback(new Error('Property not found'), 404) + return false + } + callback(null, item) + }) + .catch((e) => { + callback(e, null) + }) + } + + patchOne (req, callback) { + Properties.getOne(req, (err, item) => { + if (err) { + callback(err, item) + return false + } + + item.update(req.body) + .then(animal => { + callback(null, animal) + }) + .catch(e => { + callback(e, null) + }) + }) + } + + deleteOne (req, callback) { + Properties.getOne(req, (err, item) => { + if (err) { + callback(err, item) + return false + } + + properties.destroy({ + where: { + id: req.params.propertyId + } + }) + .then(deleted => { + if (deleted === 0) { + callback(new Error('Error when trying to delete item')) + return false + } + + callback(null, null) + }) + .catch(e => { + callback(e, null) + }) + }) + } +} + +module.exports = Properties diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index 695ce1a..0a4a351 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -1,4 +1,5 @@ const vegetables = require('../models').vegetables +const models = require('../models') const VegetableTypes = require('./VegetableTypes') const uuid = require('uuid/v4') const multer = require('multer') @@ -176,7 +177,15 @@ class Vegetables { vegetableTypeId: req.params.vegetableTypesId, id: req.params.vegetablesId }, - include: ['Type', 'Pictures'] + include: [ + 'Type', + 'Pictures', + { + model: models.vegetableProperties, + as: 'Properties', + include: ['Property'] + } + ] }) .then(item => { if (!item) { diff --git a/migrations/20181002071412-create-properties.js b/migrations/20181002071412-create-properties.js new file mode 100644 index 0000000..88aa213 --- /dev/null +++ b/migrations/20181002071412-create-properties.js @@ -0,0 +1,27 @@ +'use strict'; +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.createTable('properties', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + name: { + type: Sequelize.STRING + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }); + }, + down: (queryInterface, Sequelize) => { + return queryInterface.dropTable('properties'); + } +}; diff --git a/migrations/20181002073641-create-vegetable-properties.js b/migrations/20181002073641-create-vegetable-properties.js new file mode 100644 index 0000000..98df0d5 --- /dev/null +++ b/migrations/20181002073641-create-vegetable-properties.js @@ -0,0 +1,32 @@ +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.createTable('vegetableProperties', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + vegetableId: { + type: Sequelize.INTEGER + }, + propertyId: { + type: Sequelize.INTEGER + }, + value: { + type: Sequelize.TEXT + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }) + }, + down: (queryInterface, Sequelize) => { + return queryInterface.dropTable('vegetableProperties') + } +} diff --git a/models/properties.js b/models/properties.js new file mode 100644 index 0000000..c47ff1d --- /dev/null +++ b/models/properties.js @@ -0,0 +1,9 @@ +module.exports = (sequelize, DataTypes) => { + const Properties = sequelize.define('properties', { + name: DataTypes.STRING + }, {}) + Properties.associate = function (models) { + // associations can be defined here + } + return Properties +} diff --git a/models/vegetable_properties.js b/models/vegetable_properties.js new file mode 100644 index 0000000..015ce9a --- /dev/null +++ b/models/vegetable_properties.js @@ -0,0 +1,26 @@ +module.exports = (sequelize, DataTypes) => { + const vegetableProperties = sequelize.define('vegetableProperties', { + vegetableId: { + type: DataTypes.INTEGER, + references: 'vegetables', + referencesKey: 'id' + }, + propertyId: { + type: DataTypes.INTEGER, + references: 'properties', + referencesKey: 'id' + }, + value: DataTypes.TEXT + }, {}) + vegetableProperties.associate = function (models) { + vegetableProperties.hasOne(models.vegetables, { + as: 'Vegetable', + foreignKey: 'id' + }) + vegetableProperties.hasOne(models.properties, { + as: 'Property', + foreignKey: 'id' + }) + } + return vegetableProperties +} diff --git a/models/vegetables.js b/models/vegetables.js index 157f3d4..70a1abb 100644 --- a/models/vegetables.js +++ b/models/vegetables.js @@ -21,6 +21,11 @@ module.exports = (sequelize, DataTypes) => { foreignKey: 'vegetableId', onDelete: 'cascade' }) + vegetables.hasMany(models.vegetableProperties, { + as: 'Properties', + foreignKey: 'vegetableId', + onDelete: 'cascade' + }) } return vegetables } diff --git a/routes/properties.js b/routes/properties.js new file mode 100644 index 0000000..df2f2a6 --- /dev/null +++ b/routes/properties.js @@ -0,0 +1,75 @@ +const express = require('express') +const router = express.Router() +const Properties = require('../middleware/Properties') + +module.exports = function (passport) { + const basePath = '/api/properties/' + const itemPath = basePath + ':propertyId' + + router.route(basePath) + .get( + function (req, res) { + Properties.getAll(req, function (err, items) { + if (err) { + res.status(items || 500).send(err.message) + } else { + res.status(200).json(items) + } + }) + } + ) + .post( + passport.authenticate(['basic-auth']), + function (req, res) { + const property = new Properties() + property.createOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(201).json(item) + } + }) + } + ) + + router.route(itemPath) + .get( + function (req, res) { + Properties.getOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + .patch( + passport.authenticate(['basic-auth']), + function (req, res) { + const property = new Properties() + property.patchOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + .delete( + passport.authenticate(['basic-auth']), + function (req, res) { + const property = new Properties() + property.deleteOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + + return router +} From abffdc9438020b22fb66d22bb8614650d0a36d65 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Sat, 6 Oct 2018 16:17:27 +0200 Subject: [PATCH 22/55] Added Vegetable <-> Properties --- middleware/VegetableProperties.js | 95 +++++++++++++++++++++++++++++++ routes/vegetables.js | 74 ++++++++++++++++++++++++ 2 files changed, 169 insertions(+) create mode 100644 middleware/VegetableProperties.js diff --git a/middleware/VegetableProperties.js b/middleware/VegetableProperties.js new file mode 100644 index 0000000..874d2a9 --- /dev/null +++ b/middleware/VegetableProperties.js @@ -0,0 +1,95 @@ +const Vegetables = require('./Vegetables') +const vegetableProperties = require('../models').vegetableProperties + +class VegetableProperties { + createOne (req, callback) { + Vegetables.getOne(req, (err, item) => { + if (err) { + callback(err, item) + return false + } + + req.body.vegetableId = req.params.vegetablesId + + vegetableProperties.create(req.body) + .then(item => { + callback(null, item) + }) + .catch(e => { + callback(e, null) + }) + }) + } + + static getOne (req, callback) { + Vegetables.getOne(req, (err, item) => { + if (err) { + callback(err, item) + return false + } + vegetableProperties.findById( + req.params.propertyId, + { + include: ['Vegetable'] + }) + .then(item => { + if (!item) { + callback(new Error('Item vegetable property not found'), 404) + return false + } + callback(null, item) + }) + .catch((e) => { + callback(e, null) + }) + }) + } + + patchOne (req, callback) { + VegetableProperties.getOne(req, (err, item) => { + if (err) { + callback(err, item) + return false + } + + delete req.body.vegetableId + + item.update(req.body) + .then(animal => { + callback(null, animal) + }) + .catch(e => { + callback(e, null) + }) + }) + } + + deleteOne (req, callback) { + VegetableProperties.getOne(req, (err, item) => { + if (err) { + callback(err, item) + return false + } + + vegetableProperties.destroy({ + where: { + id: req.params.propertyId + } + }) + .then(deleted => { + if (deleted === 0) { + callback(new Error('Error when trying to delete item')) + return false + } + + callback(null, null) + }) + .catch(e => { + console.log('this case?') + callback(e, null) + }) + }) + } +} + +module.exports = VegetableProperties diff --git a/routes/vegetables.js b/routes/vegetables.js index 1db5eb9..6afd42f 100644 --- a/routes/vegetables.js +++ b/routes/vegetables.js @@ -2,13 +2,17 @@ const express = require('express') const router = express.Router() const Vegetables = require('../middleware/Vegetables') const Pictures = require('../middleware/Pictures') +const Properties = require('../middleware/VegetableProperties') module.exports = function (passport) { const basePath = '/api/types/:vegetableTypesId/vegetables' const itemPath = basePath + '/:vegetablesId' const picturesPath = itemPath + '/pictures' const picturePath = picturesPath + '/:pictureId' + const propertiesPath = itemPath + '/properties' + const propertyPath = propertiesPath + '/:propertyId' + /* Vegetables */ router.route(basePath) .get( function (req, res) { @@ -35,6 +39,7 @@ module.exports = function (passport) { } ) + /* Vegetable */ router.route(itemPath) .get( function (req, res) { @@ -74,6 +79,7 @@ module.exports = function (passport) { } ) + /* Pictures */ router.route(picturesPath) .get( function (req, res) { @@ -100,6 +106,7 @@ module.exports = function (passport) { } ) + /* Picture */ router.route(picturePath) .get( function (req, res) { @@ -126,5 +133,72 @@ module.exports = function (passport) { } ) + /* Properties */ + router.route(propertiesPath) + .get( + function (req, res) { + Properties.getAll(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + .post( + passport.authenticate(['basic-auth']), + function (req, res) { + const property = new Properties() + property.createOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(201).json(item) + } + }) + } + ) + + /* Property */ + router.route(propertyPath) + .get( + function (req, res) { + Properties.getOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + .patch( + passport.authenticate(['basic-auth']), + function (req, res) { + const property = new Properties() + property.patchOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + .delete( + passport.authenticate(['basic-auth']), + function (req, res) { + const property = new Properties() + property.deleteOne(req, function (err, item) { + if (err) { + res.status(item || 500).send(err.message) + } else { + res.status(200).json(item) + } + }) + } + ) + return router } From dcc78c725b75fd298fce00ac1284b5ce6c364ac3 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Sat, 6 Oct 2018 17:24:11 +0200 Subject: [PATCH 23/55] Fixed bug in VegetableProperties --- middleware/Vegetables.js | 6 +++--- models/vegetable_properties.js | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index 0a4a351..b08d9f7 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -181,9 +181,9 @@ class Vegetables { 'Type', 'Pictures', { - model: models.vegetableProperties, - as: 'Properties', - include: ['Property'] + model: models.vegetableProperties, + as: 'Properties', + include: ['Property'] } ] }) diff --git a/models/vegetable_properties.js b/models/vegetable_properties.js index 015ce9a..99bccb5 100644 --- a/models/vegetable_properties.js +++ b/models/vegetable_properties.js @@ -17,9 +17,10 @@ module.exports = (sequelize, DataTypes) => { as: 'Vegetable', foreignKey: 'id' }) - vegetableProperties.hasOne(models.properties, { + vegetableProperties.belongsTo(models.properties, { as: 'Property', - foreignKey: 'id' + foreignKey: 'propertyId', + targetKey: 'id' }) } return vegetableProperties From e93ad5d7b3299dbd28d6ad80d7716c59948ad190 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Wed, 10 Oct 2018 21:10:43 +0200 Subject: [PATCH 24/55] Auto add properties --- middleware/Vegetables.js | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index b08d9f7..9b4a338 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -31,7 +31,41 @@ class Vegetables { vegetables.create(newItem) .then(item => { - callback(null, item) + models.properties + .findAndCountAll() + .then(properties => { + if (properties && properties.rows.length > 0) { + let saved = 0 + const _callback = () => { + if (properties.count === saved) { + callback(null, item) + } + + properties.rows.forEach(propperty => { + models.vegetableProp + .create({ + vegetablesId: item.id, + propertyId: propperty.id + }) + .then(() => { + saved += 1 + _callback() + }) + .catch((e) => { + console.log(e) + saved += 1 + _callback() + }) + }) + } + } else { + callback(null, item) + } + }) + .catch(e => { + item.destroy() + callback(e, 500) + }) }) .catch(e => { callback(e, null) From a09d88684e8eb2ae9eaf6ddd14348bd7babdc94c Mon Sep 17 00:00:00 2001 From: dbroqua Date: Wed, 10 Oct 2018 21:14:38 +0200 Subject: [PATCH 25/55] Fixed bug --- middleware/Vegetables.js | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index 9b4a338..4cd6d50 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -40,24 +40,24 @@ class Vegetables { if (properties.count === saved) { callback(null, item) } - - properties.rows.forEach(propperty => { - models.vegetableProp - .create({ - vegetablesId: item.id, - propertyId: propperty.id - }) - .then(() => { - saved += 1 - _callback() - }) - .catch((e) => { - console.log(e) - saved += 1 - _callback() - }) - }) } + + properties.rows.forEach(propperty => { + models.vegetableProp + .create({ + vegetablesId: item.id, + propertyId: propperty.id + }) + .then(() => { + saved += 1 + _callback() + }) + .catch((e) => { + console.log(e) + saved += 1 + _callback() + }) + }) } else { callback(null, item) } From 3392600861e4a3787cf3c106596262a08acef56e Mon Sep 17 00:00:00 2001 From: dbroqua Date: Wed, 10 Oct 2018 21:17:25 +0200 Subject: [PATCH 26/55] Fixed bug --- middleware/Vegetables.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index 4cd6d50..1622ec2 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -43,7 +43,7 @@ class Vegetables { } properties.rows.forEach(propperty => { - models.vegetableProp + models.vegetableProperties .create({ vegetablesId: item.id, propertyId: propperty.id From 2c03395371c521264e3b77daca369864b2304e6e Mon Sep 17 00:00:00 2001 From: dbroqua Date: Wed, 10 Oct 2018 21:20:47 +0200 Subject: [PATCH 27/55] Fixed bug --- middleware/Vegetables.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index 1622ec2..f9adbf1 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -45,7 +45,7 @@ class Vegetables { properties.rows.forEach(propperty => { models.vegetableProperties .create({ - vegetablesId: item.id, + vegetableId: item.id, propertyId: propperty.id }) .then(() => { From 3e466925d697469a2f0d434408ceab16ef934342 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Tue, 12 Mar 2019 22:41:45 +0100 Subject: [PATCH 28/55] Added catch on fail resize --- libs/resize.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/libs/resize.js b/libs/resize.js index 24ba3bf..0f70d9e 100644 --- a/libs/resize.js +++ b/libs/resize.js @@ -24,15 +24,17 @@ class Resize { return false } - resizeImg(data, this.size).then(buf => { - fs.writeFile(output, buf, (err) => { - if (err) { - callback(err, null) - return false - } - callback(null, { input: input, output: output, size: this.size }) + resizeImg(data, this.size) + .then(buf => { + fs.writeFile(output, buf, (err) => { + if (err) { + callback(err, null) + return false + } + callback(null, { input: input, output: output, size: this.size }) + }) }) - }) + .catch(callback) }) } From cd11c01c9bdac501ca9a8d3fee833429e4536816 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Tue, 12 Mar 2019 22:50:05 +0100 Subject: [PATCH 29/55] Added catch on imagemin --- libs/aws.js | 48 ++++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/libs/aws.js b/libs/aws.js index 9065ad9..5b365c2 100644 --- a/libs/aws.js +++ b/libs/aws.js @@ -6,14 +6,14 @@ const imageminJpegtran = require('imagemin-jpegtran') const imageminPngquant = require('imagemin-pngquant') class Aws { - constructor () { + constructor() { AWS.config.update({ accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY }) } - _send (params, callback) { + _send(params, callback) { fs.readFile(params.path, (err, data) => { if (err) { callback(err, null) @@ -40,7 +40,7 @@ class Aws { }) } - _compress (params, callback) { + _compress(params, callback) { const newFile = params.path + '.' + params.filename.split('.')[1] fs.copyFile(params.path, newFile, (err, res) => { @@ -49,24 +49,28 @@ class Aws { return false } - (async () => { - const file = await imagemin([newFile], '/tmp', { - plugins: [ - imageminJpegtran(), - imageminPngquant({ - quality: '65-80' - }) - ] - }) + try { - this._send({ - path: file[0].path, - filename: params.filename - }, (err, res) => { - callback(err, res) - fs.unlink(file[0].path, () => {}) - }) - })() + (async () => { + const file = await imagemin([newFile], '/tmp', { + plugins: [ + imageminJpegtran(), + imageminPngquant({ + quality: '65-80' + }) + ] + }) + + this._send({ + path: file[0].path, + filename: params.filename + }, (err, res) => { + callback(err, res) + fs.unlink(file[0].path, () => { }) + }) + })() + } + catch (callback) }) } @@ -75,7 +79,7 @@ class Aws { * @param {Object} params {path: String, filename: String} * @param {Function} callback */ - upload (params, callback) { + upload(params, callback) { fs.readFile(params.path, (err, data) => { if (err) { callback(err, null) @@ -86,7 +90,7 @@ class Aws { }) } - deleteObjects (files, callback) { + deleteObjects(files, callback) { const s3 = new AWS.S3() const basePath = process.env.AWS_URL + process.env.AWS_BASEFOLDER let items = [] From 43a5234ab3851ff7869b717f49dac16097b158ee Mon Sep 17 00:00:00 2001 From: dbroqua Date: Tue, 12 Mar 2019 22:51:32 +0100 Subject: [PATCH 30/55] Fixed bug --- libs/aws.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libs/aws.js b/libs/aws.js index 5b365c2..aaf5434 100644 --- a/libs/aws.js +++ b/libs/aws.js @@ -6,14 +6,14 @@ const imageminJpegtran = require('imagemin-jpegtran') const imageminPngquant = require('imagemin-pngquant') class Aws { - constructor() { + constructor () { AWS.config.update({ accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY }) } - _send(params, callback) { + _send (params, callback) { fs.readFile(params.path, (err, data) => { if (err) { callback(err, null) @@ -40,7 +40,7 @@ class Aws { }) } - _compress(params, callback) { + _compress (params, callback) { const newFile = params.path + '.' + params.filename.split('.')[1] fs.copyFile(params.path, newFile, (err, res) => { @@ -50,7 +50,6 @@ class Aws { } try { - (async () => { const file = await imagemin([newFile], '/tmp', { plugins: [ @@ -69,8 +68,9 @@ class Aws { fs.unlink(file[0].path, () => { }) }) })() + } catch (e) { + callback(e) } - catch (callback) }) } @@ -79,7 +79,7 @@ class Aws { * @param {Object} params {path: String, filename: String} * @param {Function} callback */ - upload(params, callback) { + upload (params, callback) { fs.readFile(params.path, (err, data) => { if (err) { callback(err, null) @@ -90,7 +90,7 @@ class Aws { }) } - deleteObjects(files, callback) { + deleteObjects (files, callback) { const s3 = new AWS.S3() const basePath = process.env.AWS_URL + process.env.AWS_BASEFOLDER let items = [] From 1406f4645b622c7eacc38e59482bbb362b153f64 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Tue, 12 Mar 2019 23:00:37 +0100 Subject: [PATCH 31/55] Added debug mode --- libs/resize.js | 3 +++ middleware/Pictures.js | 10 +++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/libs/resize.js b/libs/resize.js index 0f70d9e..7e9241b 100644 --- a/libs/resize.js +++ b/libs/resize.js @@ -19,6 +19,7 @@ class Resize { _resize (input, output, callback) { fs.readFile(input, (err, data) => { + console.log('après readfile') if (err) { callback(err, null) return false @@ -26,7 +27,9 @@ class Resize { resizeImg(data, this.size) .then(buf => { + console.log('then rezise') fs.writeFile(output, buf, (err) => { + console.log('write file') if (err) { callback(err, null) return false diff --git a/middleware/Pictures.js b/middleware/Pictures.js index d9fcd15..1c09430 100644 --- a/middleware/Pictures.js +++ b/middleware/Pictures.js @@ -117,7 +117,7 @@ class Pictures { console.log(e) callback(e, null) }) - fs.unlink(req.file.path, () => {}) + fs.unlink(req.file.path, () => { }) } createOne (req, callback) { @@ -163,9 +163,12 @@ class Pictures { url: res.file } - fs.unlink(large.output, () => {}) + fs.unlink(large.output, () => { }) + + console.log('avant thumb') resize.createThumbnail(req.file.path, (err, file) => { + console.log('après createThumb') if (err) { callback(err, null) return false @@ -175,10 +178,11 @@ class Pictures { path: file.output, filename: `picture_${req.params.vegetablesId}_${key}_thumb.${req.file.originalname.split('.')[req.file.originalname.split('.').length - 1]}` }, (err, res) => { + console.log('après upload') if (err) { callback(err, null) } this._createOne(req, callback) - fs.unlink(file.output, () => {}) + fs.unlink(file.output, () => { }) }) }) }) From 51e379f104b5e7d621f0d9662b2e7cfce30e6e82 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Tue, 12 Mar 2019 23:03:03 +0100 Subject: [PATCH 32/55] next debug --- libs/aws.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libs/aws.js b/libs/aws.js index aaf5434..8e07881 100644 --- a/libs/aws.js +++ b/libs/aws.js @@ -44,6 +44,7 @@ class Aws { const newFile = params.path + '.' + params.filename.split('.')[1] fs.copyFile(params.path, newFile, (err, res) => { + console.log('_compress => copyFile') if (err) { callback(err, null) return false @@ -60,6 +61,8 @@ class Aws { ] }) + console.log('Après imagemin') + this._send({ path: file[0].path, filename: params.filename @@ -69,6 +72,7 @@ class Aws { }) })() } catch (e) { + console.log('Error:', e) callback(e) } }) @@ -81,6 +85,7 @@ class Aws { */ upload (params, callback) { fs.readFile(params.path, (err, data) => { + console.log('après upload -> readfile') if (err) { callback(err, null) return false From 8b8f20a6d1dd8d2d7c6b041323297ddda2ff8df7 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Tue, 12 Mar 2019 23:08:50 +0100 Subject: [PATCH 33/55] Debug --- libs/aws.js | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/libs/aws.js b/libs/aws.js index 8e07881..4f2dada 100644 --- a/libs/aws.js +++ b/libs/aws.js @@ -52,23 +52,24 @@ class Aws { try { (async () => { - const file = await imagemin([newFile], '/tmp', { - plugins: [ - imageminJpegtran(), - imageminPngquant({ - quality: '65-80' - }) - ] - }) + // const file = await imagemin([newFile], '/tmp', { + // plugins: [ + // imageminJpegtran(), + // imageminPngquant({ + // quality: '65-80' + // }) + // ] + // }) - console.log('Après imagemin') + // console.log('Après imagemin') this._send({ - path: file[0].path, + path: newFile, + // path: file[0].path, filename: params.filename }, (err, res) => { callback(err, res) - fs.unlink(file[0].path, () => { }) + // fs.unlink(file[0].path, () => { }) }) })() } catch (e) { From 823e6f0de3077a578f6484b3c864bb80f9ef544e Mon Sep 17 00:00:00 2001 From: dbroqua Date: Tue, 12 Mar 2019 23:11:28 +0100 Subject: [PATCH 34/55] Removed console.log --- libs/aws.js | 46 +++++++++---------------------- libs/resize.js | 3 -- middleware/Pictures.js | 4 --- middleware/VegetableProperties.js | 1 - 4 files changed, 13 insertions(+), 41 deletions(-) diff --git a/libs/aws.js b/libs/aws.js index 4f2dada..cb1b2d1 100644 --- a/libs/aws.js +++ b/libs/aws.js @@ -6,14 +6,14 @@ const imageminJpegtran = require('imagemin-jpegtran') const imageminPngquant = require('imagemin-pngquant') class Aws { - constructor () { + constructor() { AWS.config.update({ accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY }) } - _send (params, callback) { + _send(params, callback) { fs.readFile(params.path, (err, data) => { if (err) { callback(err, null) @@ -40,42 +40,23 @@ class Aws { }) } - _compress (params, callback) { + _compress(params, callback) { const newFile = params.path + '.' + params.filename.split('.')[1] fs.copyFile(params.path, newFile, (err, res) => { - console.log('_compress => copyFile') if (err) { callback(err, null) return false } - try { - (async () => { - // const file = await imagemin([newFile], '/tmp', { - // plugins: [ - // imageminJpegtran(), - // imageminPngquant({ - // quality: '65-80' - // }) - // ] - // }) - - // console.log('Après imagemin') - - this._send({ - path: newFile, - // path: file[0].path, - filename: params.filename - }, (err, res) => { - callback(err, res) - // fs.unlink(file[0].path, () => { }) - }) - })() - } catch (e) { - console.log('Error:', e) - callback(e) - } + this._send({ + path: newFile, + // path: file[0].path, + filename: params.filename + }, (err, res) => { + callback(err, res) + // fs.unlink(file[0].path, () => { }) + }) }) } @@ -84,9 +65,8 @@ class Aws { * @param {Object} params {path: String, filename: String} * @param {Function} callback */ - upload (params, callback) { + upload(params, callback) { fs.readFile(params.path, (err, data) => { - console.log('après upload -> readfile') if (err) { callback(err, null) return false @@ -96,7 +76,7 @@ class Aws { }) } - deleteObjects (files, callback) { + deleteObjects(files, callback) { const s3 = new AWS.S3() const basePath = process.env.AWS_URL + process.env.AWS_BASEFOLDER let items = [] diff --git a/libs/resize.js b/libs/resize.js index 7e9241b..0f70d9e 100644 --- a/libs/resize.js +++ b/libs/resize.js @@ -19,7 +19,6 @@ class Resize { _resize (input, output, callback) { fs.readFile(input, (err, data) => { - console.log('après readfile') if (err) { callback(err, null) return false @@ -27,9 +26,7 @@ class Resize { resizeImg(data, this.size) .then(buf => { - console.log('then rezise') fs.writeFile(output, buf, (err) => { - console.log('write file') if (err) { callback(err, null) return false diff --git a/middleware/Pictures.js b/middleware/Pictures.js index 1c09430..8caf0e4 100644 --- a/middleware/Pictures.js +++ b/middleware/Pictures.js @@ -165,10 +165,7 @@ class Pictures { fs.unlink(large.output, () => { }) - console.log('avant thumb') - resize.createThumbnail(req.file.path, (err, file) => { - console.log('après createThumb') if (err) { callback(err, null) return false @@ -178,7 +175,6 @@ class Pictures { path: file.output, filename: `picture_${req.params.vegetablesId}_${key}_thumb.${req.file.originalname.split('.')[req.file.originalname.split('.').length - 1]}` }, (err, res) => { - console.log('après upload') if (err) { callback(err, null) } this._createOne(req, callback) diff --git a/middleware/VegetableProperties.js b/middleware/VegetableProperties.js index 874d2a9..9bc8237 100644 --- a/middleware/VegetableProperties.js +++ b/middleware/VegetableProperties.js @@ -85,7 +85,6 @@ class VegetableProperties { callback(null, null) }) .catch(e => { - console.log('this case?') callback(e, null) }) }) From a85062966179da2ea8535b1d55badd0272a01734 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Tue, 12 Mar 2019 23:13:47 +0100 Subject: [PATCH 35/55] Fixed bug in AWS lib --- libs/aws.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/libs/aws.js b/libs/aws.js index cb1b2d1..6c0e6d5 100644 --- a/libs/aws.js +++ b/libs/aws.js @@ -1,19 +1,16 @@ const AWS = require('aws-sdk') const fs = require('fs') const path = require('path') -const imagemin = require('imagemin') -const imageminJpegtran = require('imagemin-jpegtran') -const imageminPngquant = require('imagemin-pngquant') class Aws { - constructor() { + constructor () { AWS.config.update({ accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY }) } - _send(params, callback) { + _send (params, callback) { fs.readFile(params.path, (err, data) => { if (err) { callback(err, null) @@ -35,12 +32,13 @@ class Aws { callback(null, { file: process.env.AWS_URL + dest }) + fs.unlink(params.path, () => { }) } }) }) } - _compress(params, callback) { + _compress (params, callback) { const newFile = params.path + '.' + params.filename.split('.')[1] fs.copyFile(params.path, newFile, (err, res) => { @@ -65,7 +63,7 @@ class Aws { * @param {Object} params {path: String, filename: String} * @param {Function} callback */ - upload(params, callback) { + upload (params, callback) { fs.readFile(params.path, (err, data) => { if (err) { callback(err, null) @@ -76,7 +74,7 @@ class Aws { }) } - deleteObjects(files, callback) { + deleteObjects (files, callback) { const s3 = new AWS.S3() const basePath = process.env.AWS_URL + process.env.AWS_BASEFOLDER let items = [] From b7f909ba099eeae2d44091de7aa599d1f261275b Mon Sep 17 00:00:00 2001 From: dbroqua Date: Tue, 12 Mar 2019 23:14:45 +0100 Subject: [PATCH 36/55] Removed console.log() --- middleware/Pictures.js | 1 - 1 file changed, 1 deletion(-) diff --git a/middleware/Pictures.js b/middleware/Pictures.js index 8caf0e4..f17e481 100644 --- a/middleware/Pictures.js +++ b/middleware/Pictures.js @@ -110,7 +110,6 @@ class Pictures { vegetableId: req.params.vegetablesId }) .then(item => { - console.log('ici') callback(null, item) }) .catch(e => { From 338eeb4562c3c236957962fb8520d5cdd016c909 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Fri, 15 Mar 2019 13:51:11 +0100 Subject: [PATCH 37/55] Added vegetable search route --- app.js | 1 + middleware/Vegetables.js | 37 +++++++++++++++++++++++++++++++------ routes/search.js | 22 ++++++++++++++++++++++ 3 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 routes/search.js diff --git a/app.js b/app.js index 2cd3c09..675db28 100644 --- a/app.js +++ b/app.js @@ -36,6 +36,7 @@ app.use('/', require('./routes/vegetableTypes')(passport)) app.use('/', require('./routes/vegetables')(passport)) app.use('/', require('./routes/properties')(passport)) app.use('/', require('./routes/user')(passport)) +app.use('/', require('./routes/search')(passport)) app.use(function (req, res, next) { next(createError(404)) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index f9adbf1..abbc9f9 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -7,6 +7,7 @@ const path = require('path') const fs = require('fs') const Resize = require('../libs/resize') const Aws = require('../libs/aws') +const Op = models.Sequelize.Op class Vegetables { constructor () { @@ -136,6 +137,30 @@ class Vegetables { }) } + static searchAll (req, callback) { + vegetables.findAndCountAll({ + where: { + name: { + [Op.iLike]: req.query.q + } + }, + include: ['Type'], + order: [ + ['name', 'ASC'] + ] + }) + .then(items => { + if (!items) { + callback(new Error('No vegetable found'), 204) + return false + } + callback(null, items) + }) + .catch((e) => { + callback(e, null) + }) + } + createOne (req, callback) { VegetableTypes.getOne(req, (err, universe) => { if (err) { @@ -158,7 +183,7 @@ class Vegetables { let _create = () => { if (uploaded === 2) { this._createItem(req, callback) - fs.unlink(req.file.path, () => {}) + fs.unlink(req.file.path, () => { }) } } @@ -176,7 +201,7 @@ class Vegetables { req.body.mainPicture = res.file uploaded += 1 _create() - fs.unlink(file.output, () => {}) + fs.unlink(file.output, () => { }) } }) }) @@ -194,7 +219,7 @@ class Vegetables { if (!err) { uploaded += 1 _create() - fs.unlink(file.output, () => {}) + fs.unlink(file.output, () => { }) } }) }) @@ -262,7 +287,7 @@ class Vegetables { let _patch = () => { if (uploaded === 2) { this._patchOne(item, values, callback) - fs.unlink(req.file.path, () => {}) + fs.unlink(req.file.path, () => { }) } } @@ -280,7 +305,7 @@ class Vegetables { values.mainPicture = res.file uploaded += 1 _patch() - fs.unlink(file.output, () => {}) + fs.unlink(file.output, () => { }) } }) }) @@ -298,7 +323,7 @@ class Vegetables { if (!err) { uploaded += 1 _patch() - fs.unlink(file.output, () => {}) + fs.unlink(file.output, () => { }) } }) }) diff --git a/routes/search.js b/routes/search.js new file mode 100644 index 0000000..ef2d262 --- /dev/null +++ b/routes/search.js @@ -0,0 +1,22 @@ +const express = require('express') +const router = express.Router() +const Vegetables = require('../middleware/Vegetables') + +module.exports = function () { + const basePath = '/api/search/vegetables' + + router.route(basePath) + .get( + function (req, res) { + Vegetables.searchAll(req, function (err, items) { + if (err) { + res.status(items || 500).send(err.message) + } else { + res.status(200).json(items) + } + }) + } + ) + + return router +} From 218f5de6a0674d84834c92d1fb3c0bf4a1646d67 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Fri, 15 Mar 2019 13:55:10 +0100 Subject: [PATCH 38/55] Fixed bug on full search --- middleware/Vegetables.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index abbc9f9..8661d34 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -141,7 +141,7 @@ class Vegetables { vegetables.findAndCountAll({ where: { name: { - [Op.iLike]: req.query.q + [Op.like]: `%${req.query.q}%` } }, include: ['Type'], From 219c2f449ce5a32bb1c7686ed2811ff6c803df8e Mon Sep 17 00:00:00 2001 From: dbroqua Date: Fri, 15 Mar 2019 13:56:56 +0100 Subject: [PATCH 39/55] Added limit --- middleware/Vegetables.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index 8661d34..febeeab 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -138,6 +138,10 @@ class Vegetables { } static searchAll (req, callback) { + if (!req.query.q || req.query.q.length < 3) { + callback(new Error('Minimum 3 letters'), 406) + return false + } vegetables.findAndCountAll({ where: { name: { From faaee9802294486663157672acfeca815e3c8c26 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Tue, 9 Apr 2019 19:45:00 +0200 Subject: [PATCH 40/55] Fixed bug on delete vegetable --- middleware/Vegetables.js | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index febeeab..6167e55 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -84,18 +84,34 @@ class Vegetables { } _deleteOne (item, req, callback) { - vegetables.destroy({ - where: { - id: req.params.vegetablesId - } - }) - .then(deleted => { - if (deleted === 0) { - callback(new Error('Error when trying to delete item')) - return false + models.vegetablePictures + .destroy({ + where: { + vegetableId: req.params.vegetablesId } + }) + .then(() => { + models.vegetableProperties + .destroy({ + where: { + vegetableId: req.params.vegetablesId + } + }) + .then(() => { + vegetables.destroy({ + where: { + id: req.params.vegetablesId + } + }) + .then(deleted => { + if (deleted === 0) { + callback(new Error('Error when trying to delete item')) + return false + } - callback(null, null) + callback(null, null) + }) + }) }) .catch(e => { callback(e, null) From e00a165ce22ebf8f353eae8a6c05ea471cf9dcec Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 11 Apr 2019 12:28:09 +0200 Subject: [PATCH 41/55] Updated default order for vegetables in types --- middleware/VegetableTypes.js | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/middleware/VegetableTypes.js b/middleware/VegetableTypes.js index 84d36be..61d74f4 100644 --- a/middleware/VegetableTypes.js +++ b/middleware/VegetableTypes.js @@ -1,4 +1,5 @@ -const vegetableTypes = require('../models').vegetableTypes +const models = require('../models') +const vegetableTypes = models.vegetableTypes class VegetableTypes { static getAll (req, callback) { @@ -6,7 +7,15 @@ class VegetableTypes { order: [ ['name', 'ASC'] ], - include: ['Vegetables'] + include: [{ + include: [{ + model: models.Vegetables, + as: 'Vegetables', + order: [ + ['name', 'ASC'] + ] + }] + }] }) .then(items => { if (!items) { @@ -34,7 +43,13 @@ class VegetableTypes { vegetableTypes.findById( req.params.vegetableTypesId, { - include: ['Vegetables'] + include: [{ + model: models.Vegetables, + as: 'Vegetables', + order: [ + ['name', 'ASC'] + ] + }] }) .then(item => { if (!item) { From b18612205a645b64cb5a822ebe96000ffc686c16 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 11 Apr 2019 12:31:56 +0200 Subject: [PATCH 42/55] Fixed bug --- middleware/VegetableTypes.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/middleware/VegetableTypes.js b/middleware/VegetableTypes.js index 61d74f4..e45821f 100644 --- a/middleware/VegetableTypes.js +++ b/middleware/VegetableTypes.js @@ -8,13 +8,11 @@ class VegetableTypes { ['name', 'ASC'] ], include: [{ - include: [{ - model: models.Vegetables, - as: 'Vegetables', - order: [ - ['name', 'ASC'] - ] - }] + model: models.Vegetables, + as: 'Vegetables', + order: [ + ['name', 'ASC'] + ] }] }) .then(items => { From c6b8219d1ec08153210c92ff000ff9da8e952deb Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 11 Apr 2019 12:34:20 +0200 Subject: [PATCH 43/55] Fixed bug --- middleware/VegetableTypes.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/middleware/VegetableTypes.js b/middleware/VegetableTypes.js index e45821f..cd98dd3 100644 --- a/middleware/VegetableTypes.js +++ b/middleware/VegetableTypes.js @@ -8,7 +8,7 @@ class VegetableTypes { ['name', 'ASC'] ], include: [{ - model: models.Vegetables, + model: models.vegetables, as: 'Vegetables', order: [ ['name', 'ASC'] @@ -42,7 +42,7 @@ class VegetableTypes { req.params.vegetableTypesId, { include: [{ - model: models.Vegetables, + model: models.vegetables, as: 'Vegetables', order: [ ['name', 'ASC'] From dc27bb9f089722e8bd7b029577c8cadb5e35524c Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 11 Apr 2019 12:47:20 +0200 Subject: [PATCH 44/55] Updated default order --- middleware/VegetableTypes.js | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/middleware/VegetableTypes.js b/middleware/VegetableTypes.js index cd98dd3..749b82a 100644 --- a/middleware/VegetableTypes.js +++ b/middleware/VegetableTypes.js @@ -20,7 +20,28 @@ class VegetableTypes { callback(new Error('No vegetable type found'), 204) return false } - callback(null, items) + + let res = [] + + for (let i = 0; i < items.rows.length; i += 1) { + let type = items[i].rows.toJSON() + let vegetables = [] + + for (let j = 0; j < type.Vegetables.length; j += 1) { + let k = 0 + for (k = 0; k < vegetables.length; k += 1) { + if (type.Vegetables[j].name < vegetables[k]) { + break + } + } + + vegetables.splice(k, 0, type.Vegetables[j]) + } + type.Vegetables = vegetables + res.push(type) + } + + callback(null, { count: items.count, rows: res }) }) .catch((e) => { callback(e, null) From 9dc6c5385f84f8453c77ac3ff960608061d26e38 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 11 Apr 2019 12:55:16 +0200 Subject: [PATCH 45/55] Added debug --- middleware/VegetableTypes.js | 1 + 1 file changed, 1 insertion(+) diff --git a/middleware/VegetableTypes.js b/middleware/VegetableTypes.js index 749b82a..6ad6c10 100644 --- a/middleware/VegetableTypes.js +++ b/middleware/VegetableTypes.js @@ -44,6 +44,7 @@ class VegetableTypes { callback(null, { count: items.count, rows: res }) }) .catch((e) => { + console.log('ERR:', e) callback(e, null) }) } From f67c8e01678c8d7d584ef908f408072e110e7490 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 11 Apr 2019 12:57:48 +0200 Subject: [PATCH 46/55] Fixed bug --- middleware/VegetableTypes.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/middleware/VegetableTypes.js b/middleware/VegetableTypes.js index 6ad6c10..05835c8 100644 --- a/middleware/VegetableTypes.js +++ b/middleware/VegetableTypes.js @@ -2,7 +2,7 @@ const models = require('../models') const vegetableTypes = models.vegetableTypes class VegetableTypes { - static getAll (req, callback) { + static getAll(req, callback) { vegetableTypes.findAndCountAll({ order: [ ['name', 'ASC'] @@ -24,7 +24,7 @@ class VegetableTypes { let res = [] for (let i = 0; i < items.rows.length; i += 1) { - let type = items[i].rows.toJSON() + let type = items.rows[i].toJSON() let vegetables = [] for (let j = 0; j < type.Vegetables.length; j += 1) { @@ -49,7 +49,7 @@ class VegetableTypes { }) } - createOne (req, callback) { + createOne(req, callback) { vegetableTypes.create(req.body) .then(item => { callback(null, item) @@ -59,7 +59,7 @@ class VegetableTypes { }) } - static getOne (req, callback) { + static getOne(req, callback) { vegetableTypes.findById( req.params.vegetableTypesId, { @@ -83,7 +83,7 @@ class VegetableTypes { }) } - patchOne (req, callback) { + patchOne(req, callback) { VegetableTypes.getOne(req, (err, item) => { if (err) { callback(err, item) @@ -100,7 +100,7 @@ class VegetableTypes { }) } - deleteOne (req, callback) { + deleteOne(req, callback) { VegetableTypes.getOne(req, (err, item) => { if (err) { callback(err, item) From b2cccada235070cf4d11e75b488f501608936e83 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 11 Apr 2019 13:13:01 +0200 Subject: [PATCH 47/55] Debug --- middleware/VegetableTypes.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/middleware/VegetableTypes.js b/middleware/VegetableTypes.js index 05835c8..9698bbf 100644 --- a/middleware/VegetableTypes.js +++ b/middleware/VegetableTypes.js @@ -31,6 +31,7 @@ class VegetableTypes { let k = 0 for (k = 0; k < vegetables.length; k += 1) { if (type.Vegetables[j].name < vegetables[k]) { + console.log('Break at:', k) break } } @@ -41,7 +42,7 @@ class VegetableTypes { res.push(type) } - callback(null, { count: items.count, rows: res }) + callback(null, { count: res.length, rows: res }) }) .catch((e) => { console.log('ERR:', e) From 38aff94e261c2bdff039bc6dfb228fca2792c533 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 11 Apr 2019 13:17:39 +0200 Subject: [PATCH 48/55] Fixed bug --- middleware/VegetableTypes.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/middleware/VegetableTypes.js b/middleware/VegetableTypes.js index 9698bbf..f09a7ae 100644 --- a/middleware/VegetableTypes.js +++ b/middleware/VegetableTypes.js @@ -2,7 +2,7 @@ const models = require('../models') const vegetableTypes = models.vegetableTypes class VegetableTypes { - static getAll(req, callback) { + static getAll (req, callback) { vegetableTypes.findAndCountAll({ order: [ ['name', 'ASC'] @@ -30,7 +30,7 @@ class VegetableTypes { for (let j = 0; j < type.Vegetables.length; j += 1) { let k = 0 for (k = 0; k < vegetables.length; k += 1) { - if (type.Vegetables[j].name < vegetables[k]) { + if (type.Vegetables[j].name < vegetables[k].name) { console.log('Break at:', k) break } @@ -50,7 +50,7 @@ class VegetableTypes { }) } - createOne(req, callback) { + createOne (req, callback) { vegetableTypes.create(req.body) .then(item => { callback(null, item) @@ -60,7 +60,7 @@ class VegetableTypes { }) } - static getOne(req, callback) { + static getOne (req, callback) { vegetableTypes.findById( req.params.vegetableTypesId, { @@ -84,7 +84,7 @@ class VegetableTypes { }) } - patchOne(req, callback) { + patchOne (req, callback) { VegetableTypes.getOne(req, (err, item) => { if (err) { callback(err, item) @@ -101,7 +101,7 @@ class VegetableTypes { }) } - deleteOne(req, callback) { + deleteOne (req, callback) { VegetableTypes.getOne(req, (err, item) => { if (err) { callback(err, item) From 0134087eee9261eb5d407e8f6b1b585d340e2c6d Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 11 Apr 2019 13:20:05 +0200 Subject: [PATCH 49/55] Fixed ASC --- middleware/VegetableTypes.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/middleware/VegetableTypes.js b/middleware/VegetableTypes.js index f09a7ae..cf8596e 100644 --- a/middleware/VegetableTypes.js +++ b/middleware/VegetableTypes.js @@ -77,7 +77,24 @@ class VegetableTypes { callback(new Error('Item vegetable type not found'), 404) return false } - callback(null, item) + + let type = item.toJSON() + let vegetables = [] + + for (let j = 0; j < type.Vegetables.length; j += 1) { + let k = 0 + for (k = 0; k < vegetables.length; k += 1) { + if (type.Vegetables[j].name < vegetables[k].name) { + console.log('Break at:', k) + break + } + } + + vegetables.splice(k, 0, type.Vegetables[j]) + } + type.Vegetables = vegetables + + callback(null, type) }) .catch((e) => { callback(e, null) From 71b68056216e779eed1bc1fb6351c28763b5eaff Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 11 Apr 2019 13:39:30 +0200 Subject: [PATCH 50/55] Fixed --- middleware/VegetableTypes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/middleware/VegetableTypes.js b/middleware/VegetableTypes.js index cf8596e..b1e5963 100644 --- a/middleware/VegetableTypes.js +++ b/middleware/VegetableTypes.js @@ -30,7 +30,7 @@ class VegetableTypes { for (let j = 0; j < type.Vegetables.length; j += 1) { let k = 0 for (k = 0; k < vegetables.length; k += 1) { - if (type.Vegetables[j].name < vegetables[k].name) { + if (type.Vegetables[j].name.localeCompare(vegetables[k].name) === 1) { console.log('Break at:', k) break } From 2bba8fb6f430d253b9518714ee87537261ebfe4d Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 11 Apr 2019 13:40:52 +0200 Subject: [PATCH 51/55] Fixed localeCompare() --- middleware/VegetableTypes.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/middleware/VegetableTypes.js b/middleware/VegetableTypes.js index b1e5963..908e6ce 100644 --- a/middleware/VegetableTypes.js +++ b/middleware/VegetableTypes.js @@ -30,8 +30,7 @@ class VegetableTypes { for (let j = 0; j < type.Vegetables.length; j += 1) { let k = 0 for (k = 0; k < vegetables.length; k += 1) { - if (type.Vegetables[j].name.localeCompare(vegetables[k].name) === 1) { - console.log('Break at:', k) + if (type.Vegetables[j].name.localeCompare(vegetables[k].name) === -1) { break } } @@ -84,8 +83,7 @@ class VegetableTypes { for (let j = 0; j < type.Vegetables.length; j += 1) { let k = 0 for (k = 0; k < vegetables.length; k += 1) { - if (type.Vegetables[j].name < vegetables[k].name) { - console.log('Break at:', k) + if (type.Vegetables[j].name.localeCompare(vegetables[k].name) === -1) { break } } From 932b93b9c71d22c65a956fb27c38719e0d5ee116 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 11 Apr 2019 19:20:24 +0200 Subject: [PATCH 52/55] Alpha sort for search --- middleware/Vegetables.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index 6167e55..20b0c71 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -174,7 +174,22 @@ class Vegetables { callback(new Error('No vegetable found'), 204) return false } - callback(null, items) + + const _items = items.rows.toJSON() + let vegetables = [] + + for (let j = 0; j < _items.length; j += 1) { + let k = 0 + for (k = 0; k < vegetables.length; k += 1) { + if (_items[j].name.localeCompare(vegetables[k].name) === -1) { + break + } + } + + vegetables.splice(k, 0, _items[j]) + } + + callback(null, { count: vegetables.length, rows: vegetables }) }) .catch((e) => { callback(e, null) From e0468e5805e8305c57a1a0438982afd9cd9e0c35 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 11 Apr 2019 19:27:04 +0200 Subject: [PATCH 53/55] Fixed bug on search --- middleware/Vegetables.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index 20b0c71..830c968 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -175,18 +175,18 @@ class Vegetables { return false } - const _items = items.rows.toJSON() let vegetables = [] - for (let j = 0; j < _items.length; j += 1) { + for (let j = 0; j < items.rows.length; j += 1) { + const item = items.rows[j].toJSON() let k = 0 for (k = 0; k < vegetables.length; k += 1) { - if (_items[j].name.localeCompare(vegetables[k].name) === -1) { + if (item[j].name.localeCompare(vegetables[k].name) === -1) { break } } - vegetables.splice(k, 0, _items[j]) + vegetables.splice(k, 0, item[j]) } callback(null, { count: vegetables.length, rows: vegetables }) From c1217463809e366ec597d79e4c9d36040d6db945 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 11 Apr 2019 19:31:31 +0200 Subject: [PATCH 54/55] Fixed bug on search --- middleware/Vegetables.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index 830c968..f33d98d 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -181,17 +181,18 @@ class Vegetables { const item = items.rows[j].toJSON() let k = 0 for (k = 0; k < vegetables.length; k += 1) { - if (item[j].name.localeCompare(vegetables[k].name) === -1) { + if (item.name.localeCompare(vegetables[k].name) === -1) { break } } - vegetables.splice(k, 0, item[j]) + vegetables.splice(k, 0, item) } callback(null, { count: vegetables.length, rows: vegetables }) }) .catch((e) => { + console.log('ERR:', e) callback(e, null) }) } From 53cebca836af1f8c38a7fc623a5f200851dc631e Mon Sep 17 00:00:00 2001 From: dbroqua Date: Fri, 12 Apr 2019 13:20:17 +0200 Subject: [PATCH 55/55] Improved Search --- middleware/Vegetables.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/middleware/Vegetables.js b/middleware/Vegetables.js index f33d98d..7adf0d6 100644 --- a/middleware/Vegetables.js +++ b/middleware/Vegetables.js @@ -160,11 +160,16 @@ class Vegetables { } vegetables.findAndCountAll({ where: { - name: { - [Op.like]: `%${req.query.q}%` + [Op.or]: { + name: { + [Op.like]: `%${req.query.q}%` + }, + '$Properties.value$': { + [Op.like]: `%${req.query.q}%` + } } }, - include: ['Type'], + include: ['Type', 'Properties'], order: [ ['name', 'ASC'] ]